U29tZSB3YXJuaW5ncywgZmlyc3QuCgogKiBCSUcgRkFUIFdBUk5JTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIElmIHlvdSB0b3VjaCBhbnl0aGluZyBvbiBkaXNrIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLi4uCiAqCQkJCS4uLmtpc3MgeW91ciBkYXRhIGdvb2RieWUuCiAqCiAqIElmIHlvdSBkbyByZXN1bWUgZnJvbSBpbml0cmQgYWZ0ZXIgeW91ciBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZC4uLgogKgkJCQkuLi5ieWUgYnllIHJvb3QgcGFydGl0aW9uLgogKgkJCVt0aGlzIGlzIGFjdHVhbGx5IHNhbWUgY2FzZSBhcyBhYm92ZV0KICoKICogSWYgeW91IGhhdmUgdW5zdXBwb3J0ZWQgKCopIGRldmljZXMgdXNpbmcgRE1BLCB5b3UgbWF5IGhhdmUgc29tZQogKiBwcm9ibGVtcy4gSWYgeW91ciBkaXNrIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHN1c3BlbmQuLi4gKElERSBkb2VzKSwKICogaXQgbWF5IGNhdXNlIHNvbWUgcHJvYmxlbXMsIHRvby4gSWYgeW91IGNoYW5nZSBrZXJuZWwgY29tbWFuZCBsaW5lCiAqIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLCBpdCBtYXkgZG8gc29tZXRoaW5nIHdyb25nLiBJZiB5b3UgY2hhbmdlCiAqIHlvdXIgaGFyZHdhcmUgd2hpbGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4uLiB3ZWxsLCBpdCB3YXMgbm90IGdvb2QgaWRlYTsKICogYnV0IGl0IHdpbGwgcHJvYmFibHkgb25seSBjcmFzaC4KICoKICogKCopIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgaXMgbmVlZGVkIHRvIG1ha2UgaXQgc2FmZS4KICoKICogSWYgeW91IGhhdmUgYW55IGZpbGVzeXN0ZW1zIG9uIFVTQiBkZXZpY2VzIG1vdW50ZWQgYmVmb3JlIHNvZnR3YXJlIHN1c3BlbmQsCiAqIHRoZXkgd29uJ3QgYmUgYWNjZXNzaWJsZSBhZnRlciByZXN1bWUgYW5kIHlvdSBtYXkgbG9zZSBkYXRhLCBhcyB0aG91Z2gKICogeW91IGhhdmUgdW5wbHVnZ2VkIHRoZSBVU0IgZGV2aWNlcyB3aXRoIG1vdW50ZWQgZmlsZXN5c3RlbXMgb24gdGhlbTsKICogc2VlIHRoZSBGQVEgYmVsb3cgZm9yIGRldGFpbHMuICAoVGhpcyBpcyBub3QgdHJ1ZSBmb3IgbW9yZSB0cmFkaXRpb25hbAogKiBwb3dlciBzdGF0ZXMgbGlrZSAic3RhbmRieSIsIHdoaWNoIG5vcm1hbGx5IGRvbid0IHR1cm4gVVNCIG9mZi4pCgpZb3UgbmVlZCB0byBhcHBlbmQgcmVzdW1lPS9kZXYveW91cl9zd2FwX3BhcnRpdGlvbiB0byBrZXJuZWwgY29tbWFuZApsaW5lLiBUaGVuIHlvdSBzdXNwZW5kIGJ5CgplY2hvIHNodXRkb3duID4gL3N5cy9wb3dlci9kaXNrOyBlY2hvIGRpc2sgPiAvc3lzL3Bvd2VyL3N0YXRlCgouIElmIHlvdSBmZWVsIEFDUEkgd29ya3MgcHJldHR5IHdlbGwgb24geW91ciBzeXN0ZW0sIHlvdSBtaWdodCB0cnkKCmVjaG8gcGxhdGZvcm0gPiAvc3lzL3Bvd2VyL2Rpc2s7IGVjaG8gZGlzayA+IC9zeXMvcG93ZXIvc3RhdGUKCi4gSWYgeW91IGhhdmUgU0FUQSBkaXNrcywgeW91J2xsIG5lZWQgcmVjZW50IGtlcm5lbHMgd2l0aCBTQVRBIHN1c3BlbmQKc3VwcG9ydC4gRm9yIHN1c3BlbmQgYW5kIHJlc3VtZSB0byB3b3JrLCBtYWtlIHN1cmUgeW91ciBkaXNrIGRyaXZlcnMKYXJlIGJ1aWx0IGludG8ga2VybmVsIC0tIG5vdCBtb2R1bGVzLiBbVGhlcmUncyB3YXkgdG8gbWFrZQpzdXNwZW5kL3Jlc3VtZSB3aXRoIG1vZHVsYXIgZGlzayBkcml2ZXJzLCBzZWUgRkFRLCBidXQgeW91IHByb2JhYmx5CnNob3VsZCBub3QgZG8gdGhhdC5dCgpJZiB5b3Ugd2FudCB0byBsaW1pdCB0aGUgc3VzcGVuZCBpbWFnZSBzaXplIHRvIE4gYnl0ZXMsIGRvCgplY2hvIE4gPiAvc3lzL3Bvd2VyL2ltYWdlX3NpemUKCmJlZm9yZSBzdXNwZW5kIChpdCBpcyBsaW1pdGVkIHRvIDUwMCBNQiBieSBkZWZhdWx0KS4KCgpBcnRpY2xlIGFib3V0IGdvYWxzIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBTb2Z0d2FyZSBTdXNwZW5kIGZvciBMaW51eAp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpBdXRob3I6IEeC4WJvciBLdXRpCkxhc3QgcmV2aXNlZDogMjAwMy0xMC0yMCBieSBQYXZlbCBNYWNoZWsKCklkZWEgYW5kIGdvYWxzIHRvIGFjaGlldmUKCk5vd2FkYXlzIGl0IGlzIGNvbW1vbiBpbiBzZXZlcmFsIGxhcHRvcHMgdGhhdCB0aGV5IGhhdmUgYSBzdXNwZW5kIGJ1dHRvbi4gSXQKc2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtYWNoaW5lIHRvIGEgZmlsZXN5c3RlbSBvciB0byBhIHBhcnRpdGlvbiBhbmQgc3dpdGNoZXMKdG8gc3RhbmRieSBtb2RlLiBMYXRlciByZXN1bWluZyB0aGUgbWFjaGluZSB0aGUgc2F2ZWQgc3RhdGUgaXMgbG9hZGVkIGJhY2sgdG8KcmFtIGFuZCB0aGUgbWFjaGluZSBjYW4gY29udGludWUgaXRzIHdvcmsuIEl0IGhhcyB0d28gcmVhbCBiZW5lZml0cy4gRmlyc3Qgd2UKc2F2ZSBvdXJzZWx2ZXMgdGhlIHRpbWUgbWFjaGluZSBnb2VzIGRvd24gYW5kIGxhdGVyIGJvb3RzIHVwLCBlbmVyZ3kgY29zdHMKYXJlIHJlYWwgaGlnaCB3aGVuIHJ1bm5pbmcgZnJvbSBiYXR0ZXJpZXMuIFRoZSBvdGhlciBnYWluIGlzIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0bwppbnRlcnJ1cHQgb3VyIHByb2dyYW1zIHNvIHByb2Nlc3NlcyB0aGF0IGFyZSBjYWxjdWxhdGluZyBzb21ldGhpbmcgZm9yIGEgbG9uZwp0aW1lIHNob3VsZG4ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gaW50ZXJydXB0aWJsZS4KCnN3c3VzcCBzYXZlcyB0aGUgc3RhdGUgb2YgdGhlIG1hY2hpbmUgaW50byBhY3RpdmUgc3dhcHMgYW5kIHRoZW4gcmVib290cyBvcgpwb3dlcmRvd25zLiAgWW91IG11c3QgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBzd2FwIHBhcnRpdGlvbiB0byByZXN1bWUgZnJvbSB3aXRoCmBgcmVzdW1lPScnIGtlcm5lbCBvcHRpb24uIElmIHNpZ25hdHVyZSBpcyBmb3VuZCBpdCBsb2FkcyBhbmQgcmVzdG9yZXMgc2F2ZWQKc3RhdGUuIElmIHRoZSBvcHRpb24gYGBub3Jlc3VtZScnIGlzIHNwZWNpZmllZCBhcyBhIGJvb3QgcGFyYW1ldGVyLCBpdCBza2lwcwp0aGUgcmVzdW1pbmcuCgpJbiB0aGUgbWVhbnRpbWUgd2hpbGUgdGhlIHN5c3RlbSBpcyBzdXNwZW5kZWQgeW91IHNob3VsZCBub3QgYWRkL3JlbW92ZSBhbnkKb2YgdGhlIGhhcmR3YXJlLCB3cml0ZSB0byB0aGUgZmlsZXN5c3RlbXMsIGV0Yy4KClNsZWVwIHN0YXRlcyBzdW1tYXJ5Cj09PT09PT09PT09PT09PT09PT09CgpUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IGludGVyZmFjZXMgeW91IGNhbiB1c2UsIC9wcm9jL2FjcGkgc2hvdWxkCndvcmsgbGlrZSB0aGlzOgoKSW4gYSByZWFsbHkgcGVyZmVjdCB3b3JsZDoKZWNobyAxID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdGFuZGJ5CmVjaG8gMiA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc3VzcGVuZCB0byByYW0KZWNobyAzID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdXNwZW5kIHRvIHJhbSwgYnV0IHdpdGggbW9yZSBwb3dlciBjb25zZXJ2YXRpdmUKZWNobyA0ID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdXNwZW5kIHRvIGRpc2sKZWNobyA1ID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzaHV0ZG93biB1bmZyaWVuZGx5IHRoZSBzeXN0ZW0KCmFuZCBwZXJoYXBzCmVjaG8gNGIgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgIyBmb3Igc3VzcGVuZCB0byBkaXNrIHZpYSBzNGJpb3MKCkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09CgpROiB3ZWxsLCBzdXNwZW5kaW5nIGEgc2VydmVyIGlzIElNSE8gYSByZWFsbHkgc3R1cGlkIHRoaW5nLApidXQuLi4gKERpZWdvIFp1Y2NhdG8pOgoKQTogWW91IGJvdWdodCBuZXcgVVBTIGZvciB5b3VyIHNlcnZlci4gSG93IGRvIHlvdSBpbnN0YWxsIGl0IHdpdGhvdXQKYnJpbmdpbmcgbWFjaGluZSBkb3duPyBTdXNwZW5kIHRvIGRpc2ssIHJlYXJyYW5nZSBwb3dlciBjYWJsZXMsCnJlc3VtZS4KCllvdSBoYXZlIHlvdXIgc2VydmVyIG9uIFVQUy4gUG93ZXIgZGllZCwgYW5kIFVQUyBpcyBpbmRpY2F0aW5nIDMwCnNlY29uZHMgdG8gZmFpbHVyZS4gV2hhdCBkbyB5b3UgZG8/IFN1c3BlbmQgdG8gZGlzay4KCgpROiBNYXliZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGJ1dCB3aHkgZG9uJ3QgdGhlIHJlZ3VsYXIgSS9PIHBhdGhzIHdvcms/CgpBOiBXZSBkbyB1c2UgdGhlIHJlZ3VsYXIgSS9PIHBhdGhzLiBIb3dldmVyIHdlIGNhbm5vdCByZXN0b3JlIHRoZSBkYXRhCnRvIGl0cyBvcmlnaW5hbCBsb2NhdGlvbiBhcyB3ZSBsb2FkIGl0LiBUaGF0IHdvdWxkIGNyZWF0ZSBhbgppbmNvbnNpc3RlbnQga2VybmVsIHN0YXRlIHdoaWNoIHdvdWxkIGNlcnRhaW5seSByZXN1bHQgaW4gYW4gb29wcy4KSW5zdGVhZCwgd2UgbG9hZCB0aGUgaW1hZ2UgaW50byB1bnVzZWQgbWVtb3J5IGFuZCB0aGVuIGF0b21pY2FsbHkgY29weQppdCBiYWNrIHRvIGl0IG9yaWdpbmFsIGxvY2F0aW9uLiBUaGlzIGltcGxpZXMsIG9mIGNvdXJzZSwgYSBtYXhpbXVtCmltYWdlIHNpemUgb2YgaGFsZiB0aGUgYW1vdW50IG9mIG1lbW9yeS4KClRoZXJlIGFyZSB0d28gc29sdXRpb25zIHRvIHRoaXM6CgoqIHJlcXVpcmUgaGFsZiBvZiBtZW1vcnkgdG8gYmUgZnJlZSBkdXJpbmcgc3VzcGVuZC4gVGhhdCB3YXkgeW91IGNhbgpyZWFkICJuZXciIGRhdGEgb250byBmcmVlIHNwb3RzLCB0aGVuIGNsaSBhbmQgY29weQoKKiBhc3N1bWUgd2UgaGFkIHNwZWNpYWwgInBvbGxpbmciIGlkZSBkcml2ZXIgdGhhdCBvbmx5IHVzZXMgbWVtb3J5CmJldHdlZW4gMC02NDBLQi4gVGhhdCB3YXksIEknZCBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IDAtNjQwS0IgaXMgZnJlZQpkdXJpbmcgc3VzcGVuZGluZywgYnV0IG90aGVyd2lzZSBpdCB3b3VsZCB3b3JrLi4uCgpzdXNwZW5kMiBzaGFyZXMgdGhpcyBmdW5kYW1lbnRhbCBsaW1pdGF0aW9uLCBidXQgZG9lcyBub3QgaW5jbHVkZSB1c2VyCmRhdGEgYW5kIGRpc2sgY2FjaGVzIGludG8gInVzZWQgbWVtb3J5IiBieSBzYXZpbmcgdGhlbSBpbgphZHZhbmNlLiBUaGF0IG1lYW5zIHRoYXQgdGhlIGxpbWl0YXRpb24gZ29lcyBhd2F5IGluIHByYWN0aWNlLgoKUTogRG9lcyBsaW51eCBzdXBwb3J0IEFDUEkgUzQ/CgpBOiBZZXMuIFRoYXQncyB3aGF0IGVjaG8gcGxhdGZvcm0gPiAvc3lzL3Bvd2VyL2Rpc2sgZG9lcy4KClE6IFdoYXQgaXMgJ3N1c3BlbmQyJz8KCkE6IHN1c3BlbmQyIGlzICdTb2Z0d2FyZSBTdXNwZW5kIDInLCBhIGZvcmtlZCBpbXBsZW1lbnRhdGlvbiBvZgpzdXNwZW5kLXRvLWRpc2sgd2hpY2ggaXMgYXZhaWxhYmxlIGFzIHNlcGFyYXRlIHBhdGNoZXMgZm9yIDIuNCBhbmQgMi42Cmtlcm5lbHMgZnJvbSBzd3N1c3Auc291cmNlZm9yZ2UubmV0LiBJdCBpbmNsdWRlcyBzdXBwb3J0IGZvciBTTVAsIDRHQgpoaWdobWVtIGFuZCBwcmVlbXB0aW9uLiBJdCBhbHNvIGhhcyBhIGV4dGVuc2libGUgYXJjaGl0ZWN0dXJlIHRoYXQKYWxsb3dzIGZvciBhcmJpdHJhcnkgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBpbWFnZSAoY29tcHJlc3Npb24sCmVuY3J5cHRpb24pIGFuZCBhcmJpdHJhcnkgYmFja2VuZHMgZm9yIHdyaXRpbmcgdGhlIGltYWdlIChlZyB0byBzd2FwCm9yIGFuIE5GUyBzaGFyZVtXb3JrIEluIFByb2dyZXNzXSkuIFF1ZXN0aW9ucyByZWdhcmRpbmcgc3VzcGVuZDIKc2hvdWxkIGJlIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgc3VzcGVuZDIKd2Vic2l0ZSwgYW5kIG5vdCB0byB0aGUgTGludXggS2VybmVsIE1haWxpbmcgTGlzdC4gV2UgYXJlIHdvcmtpbmcKdG93YXJkIG1lcmdpbmcgc3VzcGVuZDIgaW50byB0aGUgbWFpbmxpbmUga2VybmVsLgoKUTogQSBrZXJuZWwgdGhyZWFkIG11c3Qgdm9sdW50YXJpbHkgZnJlZXplIGl0c2VsZiAoY2FsbCAncmVmcmlnZXJhdG9yJykuCkkgZm91bmQgc29tZSBrZXJuZWwgdGhyZWFkcyB0aGF0IGRvbid0IGRvIGl0LCBhbmQgdGhleSBkb24ndCBmcmVlemUKc28gdGhlIHN5c3RlbSBjYW4ndCBzbGVlcC4gSXMgdGhpcyBhIGtub3duIGJlaGF2aW9yPwoKQTogQWxsIHN1Y2gga2VybmVsIHRocmVhZHMgbmVlZCB0byBiZSBmaXhlZCwgb25lIGJ5IG9uZS4gU2VsZWN0IHRoZQpwbGFjZSB3aGVyZSB0aGUgdGhyZWFkIGlzIHNhZmUgdG8gYmUgZnJvemVuIChubyBrZXJuZWwgc2VtYXBob3JlcwpzaG91bGQgYmUgaGVsZCBhdCB0aGF0IHBvaW50IGFuZCBpdCBtdXN0IGJlIHNhZmUgdG8gc2xlZXAgdGhlcmUpLCBhbmQKYWRkOgoKICAgICAgIHRyeV90b19mcmVlemUoKTsKCklmIHRoZSB0aHJlYWQgaXMgbmVlZGVkIGZvciB3cml0aW5nIHRoZSBpbWFnZSB0byBzdG9yYWdlLCB5b3Ugc2hvdWxkCmluc3RlYWQgc2V0IHRoZSBQRl9OT0ZSRUVaRSBwcm9jZXNzIGZsYWcgd2hlbiBjcmVhdGluZyB0aGUgdGhyZWFkIChhbmQKYmUgdmVyeSBjYXJlZnVsbCkuCgoKUTogV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICJwbGF0Zm9ybSIsICJzaHV0ZG93biIgYW5kCiJmaXJtd2FyZSIgaW4gL3N5cy9wb3dlci9kaXNrPwoKQToKCnNodXRkb3duOiBzYXZlIHN0YXRlIGluIGxpbnV4LCB0aGVuIHRlbGwgYmlvcyB0byBwb3dlcmRvd24KCnBsYXRmb3JtOiBzYXZlIHN0YXRlIGluIGxpbnV4LCB0aGVuIHRlbGwgYmlvcyB0byBwb3dlcmRvd24gYW5kIGJsaW5rCiAgICAgICAgICAic3VzcGVuZGVkIGxlZCIKCmZpcm13YXJlOiB0ZWxsIGJpb3MgdG8gc2F2ZSBzdGF0ZSBpdHNlbGYgW25lZWRzIEJJT1Mtc3BlY2lmaWMgc3VzcGVuZAoJICBwYXJ0aXRpb24sIGFuZCBoYXMgdmVyeSBsaXR0bGUgdG8gZG8gd2l0aCBzd3N1c3BdCgoicGxhdGZvcm0iIGlzIGFjdHVhbGx5IHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgInNodXRkb3duIiBpcyBtb3N0CnJlbGlhYmxlLgoKUTogSSBkbyBub3QgdW5kZXJzdGFuZCB3aHkgeW91IGhhdmUgc3VjaCBzdHJvbmcgb2JqZWN0aW9ucyB0byBpZGVhIG9mCnNlbGVjdGl2ZSBzdXNwZW5kLgoKQTogRG8gc2VsZWN0aXZlIHN1c3BlbmQgZHVyaW5nIHJ1bnRpbWUgcG93ZXIgbWFuYWdlbWVudCwgdGhhdCdzIG9rYXkuIEJ1dAppdCdzIHVzZWxlc3MgZm9yIHN1c3BlbmQtdG8tZGlzay4gKEFuZCBJIGRvIG5vdCBzZWUgaG93IHlvdSBjb3VsZCB1c2UKaXQgZm9yIHN1c3BlbmQtdG8tcmFtLCBJIGhvcGUgeW91IGRvIG5vdCB3YW50IHRoYXQpLgoKTGV0cyBzZWUsIHNvIHlvdSBzdWdnZXN0IHRvCgoqIFNVU1BFTkQgYWxsIGJ1dCBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoqIFNuYXBzaG90CiogV3JpdGUgaW1hZ2UgdG8gZGlzawoqIFNVU1BFTkQgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKiBQb3dlcmRvd24KCk9oIG5vLCB0aGF0IGRvZXMgbm90IHdvcmssIGlmIHN3YXAgZGV2aWNlIG9yIGl0cyBwYXJlbnRzIHVzZXMgRE1BLAp5b3UndmUgY29ycnVwdGVkIGRhdGEuIFlvdSdkIGhhdmUgdG8gZG8KCiogU1VTUEVORCBhbGwgYnV0IHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCiogRlJFRVpFIHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCiogU25hcHNob3QKKiBVTkZSRUVaRSBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoqIFdyaXRlCiogU1VTUEVORCBzd2FwIGRldmljZSBhbmQgcGFyZW50cwoKV2hpY2ggbWVhbnMgdGhhdCB5b3Ugc3RpbGwgbmVlZCB0aGF0IEZSRUVaRSBzdGF0ZSwgYW5kIHlvdSBnZXQgbW9yZQpjb21wbGljYXRlZCBjb2RlLiAoQW5kIEkgaGF2ZSBub3QgeWV0IGludHJvZHVjZSBkZXRhaWxzIGxpa2Ugc3lzdGVtCmRldmljZXMpLgoKUTogVGhlcmUgZG9uJ3Qgc2VlbSB0byBiZSBhbnkgZ2VuZXJhbGx5IHVzZWZ1bCBiZWhhdmlvcmFsCmRpc3RpbmN0aW9ucyBiZXR3ZWVuIFNVU1BFTkQgYW5kIEZSRUVaRS4KCkE6IERvaW5nIFNVU1BFTkQgd2hlbiB5b3UgYXJlIGFza2VkIHRvIGRvIEZSRUVaRSBpcyBhbHdheXMgY29ycmVjdCwKYnV0IGl0IG1heSBiZSB1bm5lY2Nlc3NhcmlseSBzbG93LiBJZiB5b3Ugd2FudCB5b3VyIGRyaXZlciB0byBzdGF5IHNpbXBsZSwKc2xvd25lc3MgbWF5IG5vdCBtYXR0ZXIgdG8geW91LiBJdCBjYW4gYWx3YXlzIGJlIGZpeGVkIGxhdGVyLgoKRm9yIGRldmljZXMgbGlrZSBkaXNrIGl0IGRvZXMgbWF0dGVyLCB5b3UgZG8gbm90IHdhbnQgdG8gc3BpbmRvd24gZm9yCkZSRUVaRS4KClE6IEFmdGVyIHJlc3VtaW5nLCBzeXN0ZW0gaXMgcGFnaW5nIGhlYXZpbHksIGxlYWRpbmcgdG8gdmVyeSBiYWQgaW50ZXJhY3Rpdml0eS4KCkE6IFRyeSBydW5uaW5nCgpjYXQgYGNhdCAvcHJvYy9bMC05XSovbWFwcyB8IGdyZXAgLyB8IHNlZCAnczouKiAvOi86JyB8IHNvcnQgLXVgID4gL2Rldi9udWxsCgphZnRlciByZXN1bWUuIHN3YXBvZmYgLWE7IHN3YXBvbiAtYSBtYXkgYWxzbyBiZSB1c2VmdWwuCgpROiBXaGF0IGhhcHBlbnMgdG8gZGV2aWNlcyBkdXJpbmcgc3dzdXNwPyBUaGV5IHNlZW0gdG8gYmUgcmVzdW1lZApkdXJpbmcgc3lzdGVtIHN1c3BlbmQ/CgpBOiBUaGF0J3MgY29ycmVjdC4gV2UgbmVlZCB0byByZXN1bWUgdGhlbSBpZiB3ZSB3YW50IHRvIHdyaXRlIGltYWdlIHRvCmRpc2suIFdob2xlIHNlcXVlbmNlIGdvZXMgbGlrZQoKICAgICAgU3VzcGVuZCBwYXJ0CiAgICAgIH5+fn5+fn5+fn5+fgogICAgICBydW5uaW5nIHN5c3RlbSwgdXNlciBhc2tzIGZvciBzdXNwZW5kLXRvLWRpc2sKCiAgICAgIHVzZXIgcHJvY2Vzc2VzIGFyZSBzdG9wcGVkCgogICAgICBzdXNwZW5kKFBNU0dfRlJFRVpFKTogZGV2aWNlcyBhcmUgZnJvemVuIHNvIHRoYXQgdGhleSBkb24ndCBpbnRlcmZlcmUKICAgICAgCQkgICAgICB3aXRoIHN0YXRlIHNuYXBzaG90CgogICAgICBzdGF0ZSBzbmFwc2hvdDogY29weSBvZiB3aG9sZSB1c2VkIG1lbW9yeSBpcyB0YWtlbiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKCiAgICAgIHJlc3VtZSgpOiBkZXZpY2VzIGFyZSB3b2tlbiB1cCBzbyB0aGF0IHdlIGNhbiB3cml0ZSBpbWFnZSB0byBzd2FwCgogICAgICB3cml0ZSBpbWFnZSB0byBzd2FwCgogICAgICBzdXNwZW5kKFBNU0dfU1VTUEVORCk6IHN1c3BlbmQgZGV2aWNlcyBzbyB0aGF0IHdlIGNhbiBwb3dlciBvZmYKCiAgICAgIHR1cm4gdGhlIHBvd2VyIG9mZgoKICAgICAgUmVzdW1lIHBhcnQKICAgICAgfn5+fn5+fn5+fn4KICAgICAgKGlzIGFjdHVhbGx5IHByZXR0eSBzaW1pbGFyKQoKICAgICAgcnVubmluZyBzeXN0ZW0sIHVzZXIgYXNrcyBmb3Igc3VzcGVuZC10by1kaXNrCgogICAgICB1c2VyIHByb2Nlc3NlcyBhcmUgc3RvcHBlZCAoaW4gY29tbW9uIGNhc2UgdGhlcmUgYXJlIG5vbmUsIGJ1dCB3aXRoIHJlc3VtZS1mcm9tLWluaXRyZCwgbm9vbmUga25vd3MpCgogICAgICByZWFkIGltYWdlIGZyb20gZGlzawoKICAgICAgc3VzcGVuZChQTVNHX0ZSRUVaRSk6IGRldmljZXMgYXJlIGZyb3plbiBzbyB0aGF0IHRoZXkgZG9uJ3QgaW50ZXJmZXJlCiAgICAgIAkJICAgICAgd2l0aCBpbWFnZSByZXN0b3JhdGlvbgoKICAgICAgaW1hZ2UgcmVzdG9yYXRpb246IHJld3JpdGUgbWVtb3J5IHdpdGggaW1hZ2UKCiAgICAgIHJlc3VtZSgpOiBkZXZpY2VzIGFyZSB3b2tlbiB1cCBzbyB0aGF0IHN5c3RlbSBjYW4gY29udGludWUKCiAgICAgIHRoYXcgYWxsIHVzZXIgcHJvY2Vzc2VzCgpROiBXaGF0IGlzIHRoaXMgJ0VuY3J5cHQgc3VzcGVuZCBpbWFnZScgZm9yPwoKQTogRmlyc3Qgb2YgYWxsOiBpdCBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgZG0tY3J5cHQgZW5jcnlwdGVkIHN3YXAuCkl0IGNhbm5vdCBwcm90ZWN0IHlvdXIgY29tcHV0ZXIgd2hpbGUgaXQgaXMgc3VzcGVuZGVkLiBJbnN0ZWFkIGl0IGRvZXMKcHJvdGVjdCBmcm9tIGxlYWtpbmcgc2Vuc2l0aXZlIGRhdGEgYWZ0ZXIgcmVzdW1lIGZyb20gc3VzcGVuZC4KClRoaW5rIG9mIHRoZSBmb2xsb3dpbmc6IHlvdSBzdXNwZW5kIHdoaWxlIGFuIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcKdGhhdCBrZWVwcyBzZW5zaXRpdmUgZGF0YSBpbiBtZW1vcnkuIFRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgcHJldmVudHMKdGhlIGRhdGEgZnJvbSBiZWluZyBzd2FwcGVkIG91dC4gU3VzcGVuZCwgaG93ZXZlciwgbXVzdCB3cml0ZSB0aGVzZQpkYXRhIHRvIHN3YXAgdG8gYmUgYWJsZSB0byByZXN1bWUgbGF0ZXIgb24uIFdpdGhvdXQgc3VzcGVuZCBlbmNyeXB0aW9uCnlvdXIgc2Vuc2l0aXZlIGRhdGEgYXJlIHRoZW4gc3RvcmVkIGluIHBsYWludGV4dCBvbiBkaXNrLiAgVGhpcyBtZWFucwp0aGF0IGFmdGVyIHJlc3VtZSB5b3VyIHNlbnNpdGl2ZSBkYXRhIGFyZSBhY2Nlc3NpYmxlIHRvIGFsbAphcHBsaWNhdGlvbnMgaGF2aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHN3YXAgZGV2aWNlIHdoaWNoIHdhcyB1c2VkCmZvciBzdXNwZW5kLiBJZiB5b3UgZG9uJ3QgbmVlZCBzd2FwIGFmdGVyIHJlc3VtZSB0aGVzZSBkYXRhIGNhbiByZW1haW4Kb24gZGlzayB2aXJ0dWFsbHkgZm9yZXZlci4gVGh1cyBpdCBjYW4gaGFwcGVuIHRoYXQgeW91ciBzeXN0ZW0gZ2V0cwpicm9rZW4gaW4gd2Vla3MgbGF0ZXIgYW5kIHNlbnNpdGl2ZSBkYXRhIHdoaWNoIHlvdSB0aG91Z2h0IHdlcmUKZW5jcnlwdGVkIGFuZCBwcm90ZWN0ZWQgYXJlIHJldHJpZXZlZCBhbmQgc3RvbGVuIGZyb20gdGhlIHN3YXAgZGV2aWNlLgpUbyBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uIHlvdSBzaG91bGQgdXNlICdFbmNyeXB0IHN1c3BlbmQgaW1hZ2UnLgoKRHVyaW5nIHN1c3BlbmQgYSB0ZW1wb3Jhcnkga2V5IGlzIGNyZWF0ZWQgYW5kIHRoaXMga2V5IGlzIHVzZWQgdG8KZW5jcnlwdCB0aGUgZGF0YSB3cml0dGVuIHRvIGRpc2suIFdoZW4sIGR1cmluZyByZXN1bWUsIHRoZSBkYXRhIHdhcwpyZWFkIGJhY2sgaW50byBtZW1vcnkgdGhlIHRlbXBvcmFyeSBrZXkgaXMgZGVzdHJveWVkIHdoaWNoIHNpbXBseQptZWFucyB0aGF0IGFsbCBkYXRhIHdyaXR0ZW4gdG8gZGlzayBkdXJpbmcgc3VzcGVuZCBhcmUgdGhlbgppbmFjY2Vzc2libGUgc28gdGhleSBjYW4ndCBiZSBzdG9sZW4gbGF0ZXIgb24uICBUaGUgb25seSB0aGluZyB0aGF0CnlvdSBtdXN0IHRoZW4gdGFrZSBjYXJlIG9mIGlzIHRoYXQgeW91IGNhbGwgJ21rc3dhcCcgZm9yIHRoZSBzd2FwCnBhcnRpdGlvbiB1c2VkIGZvciBzdXNwZW5kIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGR1cmluZyByZWd1bGFyCmJvb3QuIFRoaXMgYXNzZXJ0cyB0aGF0IGFueSB0ZW1wb3Jhcnkga2V5IGZyb20gYW4gb29wc2VkIHN1c3BlbmQgb3IKZnJvbSBhIGZhaWxlZCBvciBhYm9ydGVkIHJlc3VtZSBpcyBlcmFzZWQgZnJvbSB0aGUgc3dhcCBkZXZpY2UuCgpBcyBhIHJ1bGUgb2YgdGh1bWIgdXNlIGVuY3J5cHRlZCBzd2FwIHRvIHByb3RlY3QgeW91ciBkYXRhIHdoaWxlIHlvdXIKc3lzdGVtIGlzIHNodXQgZG93biBvciBzdXNwZW5kZWQuIEFkZGl0aW9uYWxseSB1c2UgdGhlIGVuY3J5cHRlZApzdXNwZW5kIGltYWdlIHRvIHByZXZlbnQgc2Vuc2l0aXZlIGRhdGEgZnJvbSBiZWluZyBzdG9sZW4gYWZ0ZXIKcmVzdW1lLgoKUTogV2h5IGNhbid0IHdlIHN1c3BlbmQgdG8gYSBzd2FwIGZpbGU/CgpBOiBCZWNhdXNlIGFjY2Vzc2luZyBzd2FwIGZpbGUgbmVlZHMgdGhlIGZpbGVzeXN0ZW0gbW91bnRlZCwgYW5kCmZpbGVzeXN0ZW0gbWlnaHQgZG8gc29tZXRoaW5nIHdyb25nIChsaWtlIHJlcGxheWluZyB0aGUgam91cm5hbCkKZHVyaW5nIG1vdW50LgoKVGhlcmUgYXJlIGZldyB3YXlzIHRvIGdldCB0aGF0IGZpeGVkOgoKMSkgUHJvYmFibHkgY291bGQgYmUgc29sdmVkIGJ5IG1vZGlmeWluZyBldmVyeSBmaWxlc3lzdGVtIHRvIHN1cHBvcnQKc29tZSBraW5kIG9mICJyZWFsbHkgcmVhZC1vbmx5ISIgb3B0aW9uLiBQYXRjaGVzIHdlbGNvbWUuCgoyKSBzdXNwZW5kMiBnZXRzIGFyb3VuZCB0aGF0IGJ5IHN0b3JpbmcgYWJzb2x1dGUgcG9zaXRpb25zIGluIG9uLWRpc2sKaW1hZ2UgKGFuZCBibG9ja3NpemUpLCB3aXRoIHJlc3VtZSBwYXJhbWV0ZXIgcG9pbnRpbmcgZGlyZWN0bHkgdG8Kc3VzcGVuZCBoZWFkZXIuCgpROiBJcyB0aGVyZSBhIG1heGltdW0gc3lzdGVtIFJBTSBzaXplIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHN3c3VzcD8KCkE6IEl0IHNob3VsZCB3b3JrIG9rYXkgd2l0aCBoaWdobWVtLgoKUTogRG9lcyBzd3N1c3AgKHRvIGRpc2spIHVzZSBvbmx5IG9uZSBzd2FwIHBhcnRpdGlvbiBvciBjYW4gaXQgdXNlCm11bHRpcGxlIHN3YXAgcGFydGl0aW9ucyAoYWdncmVnYXRlIHRoZW0gaW50byBvbmUgbG9naWNhbCBzcGFjZSk/CgpBOiBPbmx5IG9uZSBzd2FwIHBhcnRpdGlvbiwgc29ycnkuCgpROiBJZiBteSBhcHBsaWNhdGlvbihzKSBjYXVzZXMgbG90cyBvZiBtZW1vcnkgJiBzd2FwIHNwYWNlIHRvIGJlIHVzZWQKKG92ZXIgaGFsZiBvZiB0aGUgdG90YWwgc3lzdGVtIFJBTSksIGlzIGl0IGNvcnJlY3QgdGhhdCBpdCBpcyBsaWtlbHkKdG8gYmUgdXNlbGVzcyB0byB0cnkgdG8gc3VzcGVuZCB0byBkaXNrIHdoaWxlIHRoYXQgYXBwIGlzIHJ1bm5pbmc/CgpBOiBObywgaXQgc2hvdWxkIHdvcmsgb2theSwgYXMgbG9uZyBhcyB5b3VyIGFwcCBkb2VzIG5vdCBtbG9jaygpCml0LiBKdXN0IHByZXBhcmUgYmlnIGVub3VnaCBzd2FwIHBhcnRpdGlvbi4KClE6IFdoYXQgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgc3VzcGVuZC10by1kaXNrIHByb2JsZW1zPwoKQTogV2VsbCwgbGFzdCBtZXNzYWdlcyBvbiB0aGUgc2NyZWVuIGFyZSBhbHdheXMgdXNlZnVsLiBJZiBzb21ldGhpbmcKaXMgYnJva2VuLCBpdCBpcyB1c3VhbGx5IHNvbWUga2VybmVsIGRyaXZlciwgdGhlcmVmb3JlIHRyeWluZyB3aXRoIGFzCmxpdHRsZSBhcyBwb3NzaWJsZSBtb2R1bGVzIGxvYWRlZCBoZWxwcyBhIGxvdC4gSSBhbHNvIHByZWZlciBwZW9wbGUgdG8Kc3VzcGVuZCBmcm9tIGNvbnNvbGUsIHByZWZlcmFibHkgd2l0aG91dCBYIHJ1bm5pbmcuIEJvb3Rpbmcgd2l0aAppbml0PS9iaW4vYmFzaCwgdGhlbiBzd2Fwb24gYW5kIHN0YXJ0aW5nIHN1c3BlbmQgc2VxdWVuY2UgbWFudWFsbHkKdXN1YWxseSBkb2VzIHRoZSB0cmljay4gVGhlbiBpdCBpcyBnb29kIGlkZWEgdG8gdHJ5IHdpdGggbGF0ZXN0CnZhbmlsbGEga2VybmVsLgoKUTogSG93IGNhbiBkaXN0cmlidXRpb25zIHNoaXAgYSBzd3N1c3Atc3VwcG9ydGluZyBrZXJuZWwgd2l0aCBtb2R1bGFyCmRpc2sgZHJpdmVycyAoZXNwZWNpYWxseSBTQVRBKT8KCkE6IFdlbGwsIGl0IGNhbiBiZSBkb25lLCBsb2FkIHRoZSBkcml2ZXJzLCB0aGVuIGRvIGVjaG8gaW50bwovc3lzL3Bvd2VyL2Rpc2svcmVzdW1lIGZpbGUgZnJvbSBpbml0cmQuIEJlIHN1cmUgbm90IHRvIG1vdW50CmFueXRoaW5nLCBub3QgZXZlbiByZWFkLW9ubHkgbW91bnQsIG9yIHlvdSBhcmUgZ29pbmcgdG8gbG9zZSB5b3VyCmRhdGEuCgpROiBIb3cgZG8gSSBtYWtlIHN1c3BlbmQgbW9yZSB2ZXJib3NlPwoKQTogSWYgeW91IHdhbnQgdG8gc2VlIGFueSBub24tZXJyb3Iga2VybmVsIG1lc3NhZ2VzIG9uIHRoZSB2aXJ0dWFsCnRlcm1pbmFsIHRoZSBrZXJuZWwgc3dpdGNoZXMgdG8gZHVyaW5nIHN1c3BlbmQsIHlvdSBoYXZlIHRvIHNldCB0aGUKa2VybmVsIGNvbnNvbGUgbG9nbGV2ZWwgdG8gYXQgbGVhc3QgNCAoS0VSTl9XQVJOSU5HKSwgZm9yIGV4YW1wbGUgYnkKZG9pbmcKCgkjIHNhdmUgdGhlIG9sZCBsb2dsZXZlbAoJcmVhZCBMT0dMRVZFTCBEVU1NWSA8IC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCgkjIHNldCB0aGUgbG9nbGV2ZWwgc28gd2Ugc2VlIHRoZSBwcm9ncmVzcyBiYXIuCgkjIGlmIHRoZSBsZXZlbCBpcyBoaWdoZXIgdGhhbiBuZWVkZWQsIHdlIGxlYXZlIGl0IGFsb25lLgoJaWYgWyAkTE9HTEVWRUwgLWx0IDUgXTsgdGhlbgoJICAgICAgICBlY2hvIDUgPiAvcHJvYy9zeXMva2VybmVsL3ByaW50awoJCWZpCgogICAgICAgIElNR19TWj0wCiAgICAgICAgcmVhZCBJTUdfU1ogPCAvc3lzL3Bvd2VyL2ltYWdlX3NpemUKICAgICAgICBlY2hvIC1uIGRpc2sgPiAvc3lzL3Bvd2VyL3N0YXRlCiAgICAgICAgUkVUPSQ/CiAgICAgICAgIwogICAgICAgICMgdGhlIGxvZ2ljIGhlcmUgaXM6CiAgICAgICAgIyBpZiBpbWFnZV9zaXplID4gMCAod2l0aG91dCBrZXJuZWwgc3VwcG9ydCwgSU1HX1NaIHdpbGwgYmUgemVybyksCiAgICAgICAgIyB0aGVuIHRyeSBhZ2FpbiB3aXRoIGltYWdlX3NpemUgc2V0IHRvIHplcm8uCglpZiBbICRSRVQgLW5lIDAgLWEgJElNR19TWiAtbmUgMCBdOyB0aGVuICMgdHJ5IGFnYWluIHdpdGggbWluaW1hbCBpbWFnZSBzaXplCiAgICAgICAgICAgICAgICBlY2hvIDAgPiAvc3lzL3Bvd2VyL2ltYWdlX3NpemUKICAgICAgICAgICAgICAgIGVjaG8gLW4gZGlzayA+IC9zeXMvcG93ZXIvc3RhdGUKICAgICAgICAgICAgICAgIFJFVD0kPwogICAgICAgIGZpCgoJIyByZXN0b3JlIHByZXZpb3VzIGxvZ2xldmVsCgllY2hvICRMT0dMRVZFTCA+IC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCglleGl0ICRSRVQKClE6IElzIHRoaXMgdHJ1ZSB0aGF0IGlmIEkgaGF2ZSBhIG1vdW50ZWQgZmlsZXN5c3RlbSBvbiBhIFVTQiBkZXZpY2UgYW5kCkkgc3VzcGVuZCB0byBkaXNrLCBJIGNhbiBsb3NlIGRhdGEgdW5sZXNzIHRoZSBmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQKd2l0aCAic3luYyI/CgpBOiBUaGF0J3MgcmlnaHQgLi4uIGlmIHlvdSBkaXNjb25uZWN0IHRoYXQgZGV2aWNlLCB5b3UgbWF5IGxvc2UgZGF0YS4KSW4gZmFjdCwgZXZlbiB3aXRoICItbyBzeW5jIiB5b3UgY2FuIGxvc2UgZGF0YSBpZiB5b3VyIHByb2dyYW1zIGhhdmUKaW5mb3JtYXRpb24gaW4gYnVmZmVycyB0aGV5IGhhdmVuJ3Qgd3JpdHRlbiBvdXQgdG8gYSBkaXNrIHlvdSBkaXNjb25uZWN0LApvciBpZiB5b3UgZGlzY29ubmVjdCBiZWZvcmUgdGhlIGRldmljZSBmaW5pc2hlZCBzYXZpbmcgZGF0YSB5b3Ugd3JvdGUuCgpTb2Z0d2FyZSBzdXNwZW5kIG5vcm1hbGx5IHBvd2VycyBkb3duIFVTQiBjb250cm9sbGVycywgd2hpY2ggaXMgZXF1aXZhbGVudAp0byBkaXNjb25uZWN0aW5nIGFsbCBVU0IgZGV2aWNlcyBhdHRhY2hlZCB0byB5b3VyIHN5c3RlbS4KCllvdXIgc3lzdGVtIG1pZ2h0IHdlbGwgc3VwcG9ydCBsb3ctcG93ZXIgbW9kZXMgZm9yIGl0cyBVU0IgY29udHJvbGxlcnMKd2hpbGUgdGhlIHN5c3RlbSBpcyBhc2xlZXAsIG1haW50YWluaW5nIHRoZSBjb25uZWN0aW9uLCB1c2luZyB0cnVlIHNsZWVwCm1vZGVzIGxpa2UgInN1c3BlbmQtdG8tUkFNIiBvciAic3RhbmRieSIuICAoRG9uJ3Qgd3JpdGUgImRpc2siIHRvIHRoZQovc3lzL3Bvd2VyL3N0YXRlIGZpbGU7IHdyaXRlICJzdGFuZGJ5IiBvciAibWVtIi4pICBXZSd2ZSBub3Qgc2VlbiBhbnkKaGFyZHdhcmUgdGhhdCBjYW4gdXNlIHRoZXNlIG1vZGVzIHRocm91Z2ggc29mdHdhcmUgc3VzcGVuZCwgYWx0aG91Z2ggaW4KdGhlb3J5IHNvbWUgc3lzdGVtcyBtaWdodCBzdXBwb3J0ICJwbGF0Zm9ybSIgb3IgImZpcm13YXJlIiBtb2RlcyB0aGF0Cndvbid0IGJyZWFrIHRoZSBVU0IgY29ubmVjdGlvbnMuCgpSZW1lbWJlciB0aGF0IGl0J3MgYWx3YXlzIGEgYmFkIGlkZWEgdG8gdW5wbHVnIGEgZGlzayBkcml2ZSBjb250YWluaW5nIGEKbW91bnRlZCBmaWxlc3lzdGVtLiAgVGhhdCdzIHRydWUgZXZlbiB3aGVuIHlvdXIgc3lzdGVtIGlzIGFzbGVlcCEgIFRoZQpzYWZlc3QgdGhpbmcgaXMgdG8gdW5tb3VudCBhbGwgZmlsZXN5c3RlbXMgb24gcmVtb3ZhYmxlIG1lZGlhIChzdWNoIFVTQiwKRmlyZXdpcmUsIENvbXBhY3RGbGFzaCwgTU1DLCBleHRlcm5hbCBTQVRBLCBvciBldmVuIElERSBob3RwbHVnIGJheXMpCmJlZm9yZSBzdXNwZW5kaW5nOyB0aGVuIHJlbW91bnQgdGhlbSBhZnRlciByZXN1bWluZy4KClE6IEkgdXBncmFkZWQgdGhlIGtlcm5lbCBmcm9tIDIuNi4xNSB0byAyLjYuMTYuIEJvdGgga2VybmVscyB3ZXJlCmNvbXBpbGVkIHdpdGggdGhlIHNpbWlsYXIgY29uZmlndXJhdGlvbiBmaWxlcy4gQW55d2F5IEkgZm91bmQgdGhhdApzdXNwZW5kIHRvIGRpc2sgKGFuZCByZXN1bWUpIGlzIG11Y2ggc2xvd2VyIG9uIDIuNi4xNiBjb21wYXJlZCB0bwoyLjYuMTUuIEFueSBpZGVhIGZvciB3aHkgdGhhdCBtaWdodCBoYXBwZW4gb3IgaG93IGNhbiBJIHNwZWVkIGl0IHVwPwoKQTogVGhpcyBpcyBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSBzdXNwZW5kIGltYWdlIGlzIG5vdyBncmVhdGVyIHRoYW4KZm9yIDIuNi4xNSAoYnkgc2F2aW5nIG1vcmUgZGF0YSB3ZSBjYW4gZ2V0IG1vcmUgcmVzcG9uc2l2ZSBzeXN0ZW0KYWZ0ZXIgcmVzdW1lKS4KClRoZXJlJ3MgdGhlIC9zeXMvcG93ZXIvaW1hZ2Vfc2l6ZSBrbm9iIHRoYXQgY29udHJvbHMgdGhlIHNpemUgb2YgdGhlCmltYWdlLiAgSWYgeW91IHNldCBpdCB0byAwIChlZy4gYnkgZWNobyAwID4gL3N5cy9wb3dlci9pbWFnZV9zaXplIGFzCnJvb3QpLCB0aGUgMi42LjE1IGJlaGF2aW9yIHNob3VsZCBiZSByZXN0b3JlZC4gIElmIGl0IGlzIHN0aWxsIHRvbwpzbG93LCB0YWtlIGEgbG9vayBhdCBzdXNwZW5kLnNmLm5ldCAtLSB1c2VybGFuZCBzdXNwZW5kIGlzIGZhc3RlciBhbmQKc3VwcG9ydHMgTFpGIGNvbXByZXNzaW9uIHRvIHNwZWVkIGl0IHVwIGZ1cnRoZXIuCg==