lakutata 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/codeStyles/Project.xml +18 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/lakutata.iml +13 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/build/Application-78a416de.d.ts +387 -0
- package/build/Application-b5e19e08.d.ts +387 -0
- package/build/Components.cjs +55 -0
- package/build/Components.d.cts +9 -0
- package/build/Components.d.ts +9 -0
- package/build/Components.js +44 -0
- package/build/Core.cjs +148 -0
- package/build/Core.d.cts +33 -0
- package/build/Core.d.ts +33 -0
- package/build/Core.js +71 -0
- package/build/Crypto.cjs +96 -0
- package/build/Crypto.d.cts +19 -0
- package/build/Crypto.d.ts +19 -0
- package/build/Crypto.js +41 -0
- package/build/Decorators.cjs +100 -0
- package/build/Decorators.d.cts +23 -0
- package/build/Decorators.d.ts +23 -0
- package/build/Decorators.js +45 -0
- package/build/DependencyInjectionContainer-871a6c03.d.ts +340 -0
- package/build/DependencyInjectionContainer-f037ac36.d.ts +340 -0
- package/build/Exceptions.cjs +144 -0
- package/build/Exceptions.d.cts +28 -0
- package/build/Exceptions.d.ts +28 -0
- package/build/Exceptions.js +37 -0
- package/build/Hash.cjs +223 -0
- package/build/Hash.d.cts +535 -0
- package/build/Hash.d.ts +535 -0
- package/build/Hash.js +10 -0
- package/build/Time.cjs +14 -0
- package/build/Time.d.cts +5 -0
- package/build/Time.d.ts +5 -0
- package/build/Time.js +5 -0
- package/build/TimeInput-24fced42.d.ts +243 -0
- package/build/TimeInput-4401fc58.d.ts +243 -0
- package/build/Utilities.cjs +100 -0
- package/build/Utilities.d.cts +212 -0
- package/build/Utilities.d.ts +212 -0
- package/build/Utilities.js +7 -0
- package/build/Validator.cjs +24 -0
- package/build/Validator.d.cts +1851 -0
- package/build/Validator.d.ts +1851 -0
- package/build/Validator.js +11 -0
- package/build/chunk-26TQI22I.js +196 -0
- package/build/chunk-27OFA7C3.js +16 -0
- package/build/chunk-2C2UILFN.js +23 -0
- package/build/chunk-2CHYQHWR.cjs +16 -0
- package/build/chunk-2DN35UQB.cjs +10947 -0
- package/build/chunk-2E4TF6LU.cjs +16 -0
- package/build/chunk-2PLJEW2R.js +14 -0
- package/build/chunk-2RW3VMNS.js +45 -0
- package/build/chunk-2T6JU2UH.js +14 -0
- package/build/chunk-3CX3GCQF.js +32 -0
- package/build/chunk-3JIQCDQG.cjs +25 -0
- package/build/chunk-3KLEN3PR.js +14 -0
- package/build/chunk-3LZRQPJ5.js +14 -0
- package/build/chunk-3NHHHZFR.cjs +870 -0
- package/build/chunk-4332C5BW.js +30 -0
- package/build/chunk-46V7GHKE.cjs +25 -0
- package/build/chunk-4EPPSZ7L.js +14 -0
- package/build/chunk-4FEEQIQ4.js +23 -0
- package/build/chunk-4G2ZCUBN.js +5570 -0
- package/build/chunk-4KTVY73U.js +15 -0
- package/build/chunk-4MQXSUTL.cjs +14 -0
- package/build/chunk-4OHSPWRQ.js +34 -0
- package/build/chunk-4PK4TGU4.cjs +16 -0
- package/build/chunk-4YXUEJSO.js +23 -0
- package/build/chunk-5475IFR4.cjs +16 -0
- package/build/chunk-5B5Z4GCR.cjs +17 -0
- package/build/chunk-5FPTDIKI.cjs +16 -0
- package/build/chunk-5NK7E2HA.js +69 -0
- package/build/chunk-67F5WP5Z.cjs +8 -0
- package/build/chunk-6BJTKEXZ.cjs +25 -0
- package/build/chunk-6WNLPTDY.cjs +8 -0
- package/build/chunk-7G7FCNEG.cjs +8 -0
- package/build/chunk-7IVNTVYK.cjs +16 -0
- package/build/chunk-7MJAWOWL.js +22896 -0
- package/build/chunk-7MTOK62N.js +767 -0
- package/build/chunk-7PADGZPI.cjs +129 -0
- package/build/chunk-7ZUM53G6.js +14 -0
- package/build/chunk-A4BYNKYF.js +42 -0
- package/build/chunk-A7F6LCRA.cjs +16 -0
- package/build/chunk-AFV3VN3X.cjs +8 -0
- package/build/chunk-AGHMOCC3.cjs +16 -0
- package/build/chunk-AHUH4FWQ.cjs +29 -0
- package/build/chunk-AM4YMG2S.js +6 -0
- package/build/chunk-ANDEVIKJ.cjs +16 -0
- package/build/chunk-APETX7ZT.cjs +16 -0
- package/build/chunk-ASMC7EUP.js +6 -0
- package/build/chunk-BDCRHGKN.js +6 -0
- package/build/chunk-BDJXMO44.js +2920 -0
- package/build/chunk-BE7ICF5R.js +32 -0
- package/build/chunk-BEDKPRVX.cjs +17 -0
- package/build/chunk-BFE66ADZ.cjs +34 -0
- package/build/chunk-BKCT2HSQ.js +178 -0
- package/build/chunk-BMNC4W46.js +20 -0
- package/build/chunk-BO7Y6HNS.cjs +176 -0
- package/build/chunk-D4H35ART.cjs +53 -0
- package/build/chunk-D5DE7Z4J.js +29 -0
- package/build/chunk-DHSSJJMD.cjs +25 -0
- package/build/chunk-DIMOR6NE.cjs +8 -0
- package/build/chunk-DN5TSX6S.cjs +244 -0
- package/build/chunk-EEH5LCBP.cjs +16 -0
- package/build/chunk-EFYDUUXT.cjs +92 -0
- package/build/chunk-ENJSEFE4.js +14 -0
- package/build/chunk-EPYJVQHQ.js +6 -0
- package/build/chunk-EUVLTNDV.js +32 -0
- package/build/chunk-EXQVCESB.cjs +20 -0
- package/build/chunk-EYPPC6HP.js +18 -0
- package/build/chunk-F5NKGQDL.cjs +16 -0
- package/build/chunk-F7RNH2H2.js +266 -0
- package/build/chunk-FCTV4OB7.cjs +50 -0
- package/build/chunk-FHEXUE67.js +29 -0
- package/build/chunk-FJP3KNXK.js +23 -0
- package/build/chunk-FJQSLRIP.js +14 -0
- package/build/chunk-FSFWPTIC.js +6 -0
- package/build/chunk-FTKFMQHJ.cjs +16 -0
- package/build/chunk-FW26MPE4.js +69 -0
- package/build/chunk-FZNRGZGE.js +6372 -0
- package/build/chunk-G7EDOLQ7.cjs +100 -0
- package/build/chunk-GGY7LCMQ.cjs +73 -0
- package/build/chunk-GLWUJIMW.cjs +8 -0
- package/build/chunk-GZ5KN2PE.js +6 -0
- package/build/chunk-HBPRX3WA.cjs +202 -0
- package/build/chunk-HJAQ6WJM.cjs +288 -0
- package/build/chunk-HJSJA5CF.js +14 -0
- package/build/chunk-HKAY7FWM.js +28 -0
- package/build/chunk-HMKTNRQF.js +14 -0
- package/build/chunk-HODDA5D5.js +199 -0
- package/build/chunk-HPKJUFTM.js +14 -0
- package/build/chunk-HWCTWIVZ.cjs +30 -0
- package/build/chunk-HXWC4YN6.cjs +22908 -0
- package/build/chunk-HZJ7XFHQ.cjs +8 -0
- package/build/chunk-I5TGKTX6.js +18 -0
- package/build/chunk-I7J6V3EU.cjs +34 -0
- package/build/chunk-IKWXYUGY.js +14 -0
- package/build/chunk-IYGGR65W.cjs +16 -0
- package/build/chunk-J6RXNX2K.js +174 -0
- package/build/chunk-JAEEMFEZ.cjs +24 -0
- package/build/chunk-JFOMNL5I.cjs +22 -0
- package/build/chunk-JPV2PUHF.cjs +8 -0
- package/build/chunk-JR726PDZ.cjs +70 -0
- package/build/chunk-JTKOYDJB.js +5914 -0
- package/build/chunk-JU53NOVA.cjs +31 -0
- package/build/chunk-JVSBYHUY.js +10944 -0
- package/build/chunk-JYBISTRN.cjs +25 -0
- package/build/chunk-K2ALA7QI.js +12 -0
- package/build/chunk-KG6DPM4B.js +14 -0
- package/build/chunk-KNSBLLL2.cjs +32 -0
- package/build/chunk-KNTGBUSY.js +6 -0
- package/build/chunk-KWOHVRRL.js +6 -0
- package/build/chunk-L3IVYIVA.js +23 -0
- package/build/chunk-LBL5XNWX.js +221 -0
- package/build/chunk-LBOBUFWZ.js +6 -0
- package/build/chunk-LEJXJUBE.js +6 -0
- package/build/chunk-LJTCXKC4.js +242 -0
- package/build/chunk-MBKTJ3KM.cjs +118 -0
- package/build/chunk-MDE5SRLT.cjs +16 -0
- package/build/chunk-MEKICSEL.js +22 -0
- package/build/chunk-MNDBRDT2.cjs +608 -0
- package/build/chunk-MSWZLYS7.cjs +5916 -0
- package/build/chunk-MT2OB376.js +14 -0
- package/build/chunk-MVWB4XDJ.js +14 -0
- package/build/chunk-MXAAAL2S.js +53 -0
- package/build/chunk-N37KV2VV.cjs +199 -0
- package/build/chunk-NZ5IZMM5.cjs +2922 -0
- package/build/chunk-O2NOYN65.js +54 -0
- package/build/chunk-OAD22QZQ.js +6 -0
- package/build/chunk-OIFILR4I.js +125 -0
- package/build/chunk-OJGBPS2B.cjs +16 -0
- package/build/chunk-OMPATIMZ.cjs +71 -0
- package/build/chunk-P3Z7ZEGJ.cjs +18 -0
- package/build/chunk-P6BBXCBD.cjs +6425 -0
- package/build/chunk-PE4C2TIO.cjs +16 -0
- package/build/chunk-PF2WAZLH.cjs +52 -0
- package/build/chunk-PFFTGOAR.cjs +25 -0
- package/build/chunk-PFUZLHWJ.cjs +25 -0
- package/build/chunk-POE7A7NF.cjs +180 -0
- package/build/chunk-PQSDA5BN.js +50 -0
- package/build/chunk-PR5TPAGH.js +14 -0
- package/build/chunk-PXMWVOKK.cjs +16 -0
- package/build/chunk-PZ5OJC4I.cjs +16 -0
- package/build/chunk-Q4LNTPEI.cjs +34 -0
- package/build/chunk-QCA5YGYV.js +14 -0
- package/build/chunk-QGGML4PP.js +17 -0
- package/build/chunk-QHW273SN.js +32 -0
- package/build/chunk-QJJRQMA6.cjs +8 -0
- package/build/chunk-QKB76MIV.cjs +769 -0
- package/build/chunk-QKVPGRI5.cjs +8 -0
- package/build/chunk-QME47CJL.cjs +8 -0
- package/build/chunk-QNJ6XBYQ.js +14 -0
- package/build/chunk-QWYKUNU5.js +14 -0
- package/build/chunk-QXTBP6TW.js +116 -0
- package/build/chunk-RH3LAIQS.js +32 -0
- package/build/chunk-RMAXG5F7.js +118 -0
- package/build/chunk-RUHAPGDE.js +14 -0
- package/build/chunk-S4KA3ZGO.js +6 -0
- package/build/chunk-SAGMV3YX.cjs +16 -0
- package/build/chunk-SCWEQ5JA.cjs +34 -0
- package/build/chunk-SEKBDIJH.cjs +16 -0
- package/build/chunk-SGWWTKLW.cjs +16 -0
- package/build/chunk-SWCU6OID.cjs +61 -0
- package/build/chunk-T4C7UJEZ.js +29 -0
- package/build/chunk-TBWIKIS3.cjs +8 -0
- package/build/chunk-TS74DN3N.cjs +229 -0
- package/build/chunk-TXTNUC7S.cjs +16 -0
- package/build/chunk-UEGDBJEG.cjs +127 -0
- package/build/chunk-UR2ZK7MI.cjs +16 -0
- package/build/chunk-VAOR6JOP.js +14 -0
- package/build/chunk-VELZ3KJY.cjs +45 -0
- package/build/chunk-VHTAHAD6.cjs +34 -0
- package/build/chunk-VISA22LF.js +14 -0
- package/build/chunk-VOFRWVGM.js +23 -0
- package/build/chunk-VPRNM6FU.cjs +118 -0
- package/build/chunk-VTFNEUOF.js +14 -0
- package/build/chunk-VVNU27G2.js +868 -0
- package/build/chunk-W3TQER3B.cjs +31 -0
- package/build/chunk-WINISBV4.js +70 -0
- package/build/chunk-WSEZ7DZV.js +14 -0
- package/build/chunk-WW57G6RG.js +124 -0
- package/build/chunk-WYJCE3KY.cjs +5593 -0
- package/build/chunk-WZI5UPER.cjs +61 -0
- package/build/chunk-WZZF2IEV.js +14 -0
- package/build/chunk-X4AIZSIY.cjs +47 -0
- package/build/chunk-XO6M5AYN.js +585 -0
- package/build/chunk-XWP76C6E.js +25 -0
- package/build/chunk-Y7O5SCF6.cjs +16 -0
- package/build/chunk-YEBPQG7X.js +96 -0
- package/build/chunk-YT4CYDJ3.js +14 -0
- package/build/chunk-ZG3PHRVQ.cjs +20 -0
- package/build/chunk-ZG7QF5S2.cjs +16 -0
- package/build/chunk-ZJYLWSBE.js +90 -0
- package/build/chunk-ZYBMNLGI.js +48 -0
- package/build/constants/DefaultValue.cjs +14 -0
- package/build/constants/DefaultValue.d.cts +9 -0
- package/build/constants/DefaultValue.d.ts +9 -0
- package/build/constants/DefaultValue.js +5 -0
- package/build/constants/MetadataKey.cjs +114 -0
- package/build/constants/MetadataKey.d.cts +30 -0
- package/build/constants/MetadataKey.d.ts +30 -0
- package/build/constants/MetadataKey.js +5 -0
- package/build/decorators/ControllerDecorators.cjs +21 -0
- package/build/decorators/ControllerDecorators.d.cts +32 -0
- package/build/decorators/ControllerDecorators.d.ts +32 -0
- package/build/decorators/ControllerDecorators.js +12 -0
- package/build/decorators/DependencyInjectionDecorators.cjs +78 -0
- package/build/decorators/DependencyInjectionDecorators.d.cts +75 -0
- package/build/decorators/DependencyInjectionDecorators.d.ts +75 -0
- package/build/decorators/DependencyInjectionDecorators.js +41 -0
- package/build/decorators/ValidationDecorators.cjs +35 -0
- package/build/decorators/ValidationDecorators.d.cts +36 -0
- package/build/decorators/ValidationDecorators.d.ts +36 -0
- package/build/decorators/ValidationDecorators.js +14 -0
- package/build/exceptions/DependencyInjectionException.cjs +18 -0
- package/build/exceptions/DependencyInjectionException.d.cts +8 -0
- package/build/exceptions/DependencyInjectionException.d.ts +8 -0
- package/build/exceptions/DependencyInjectionException.js +9 -0
- package/build/exceptions/InvalidConfigurableValueException.cjs +18 -0
- package/build/exceptions/InvalidConfigurableValueException.d.cts +8 -0
- package/build/exceptions/InvalidConfigurableValueException.d.ts +8 -0
- package/build/exceptions/InvalidConfigurableValueException.js +9 -0
- package/build/exceptions/InvalidDTOValueException.cjs +18 -0
- package/build/exceptions/InvalidDTOValueException.d.cts +8 -0
- package/build/exceptions/InvalidDTOValueException.d.ts +8 -0
- package/build/exceptions/InvalidDTOValueException.js +9 -0
- package/build/exceptions/InvalidGlobStringException.cjs +18 -0
- package/build/exceptions/InvalidGlobStringException.d.cts +8 -0
- package/build/exceptions/InvalidGlobStringException.d.ts +8 -0
- package/build/exceptions/InvalidGlobStringException.js +9 -0
- package/build/exceptions/MethodNotFoundException.cjs +18 -0
- package/build/exceptions/MethodNotFoundException.d.cts +8 -0
- package/build/exceptions/MethodNotFoundException.d.ts +8 -0
- package/build/exceptions/MethodNotFoundException.js +9 -0
- package/build/exceptions/NotSupportHashException.cjs +18 -0
- package/build/exceptions/NotSupportHashException.d.cts +8 -0
- package/build/exceptions/NotSupportHashException.d.ts +8 -0
- package/build/exceptions/NotSupportHashException.js +9 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.cjs +18 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.d.cts +8 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.d.ts +8 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.js +9 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.cjs +18 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.d.cts +8 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.d.ts +8 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.js +9 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.cjs +18 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.d.cts +8 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.d.ts +8 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.js +9 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.js +9 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.js +9 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.js +9 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.js +9 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.js +9 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.js +9 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.cjs +18 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.d.cts +8 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.d.ts +8 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.js +9 -0
- package/build/exceptions/validation/InvalidMethodReturnException.cjs +18 -0
- package/build/exceptions/validation/InvalidMethodReturnException.d.cts +8 -0
- package/build/exceptions/validation/InvalidMethodReturnException.d.ts +8 -0
- package/build/exceptions/validation/InvalidMethodReturnException.js +9 -0
- package/build/exceptions/validation/InvalidValueException.cjs +18 -0
- package/build/exceptions/validation/InvalidValueException.d.cts +8 -0
- package/build/exceptions/validation/InvalidValueException.d.ts +8 -0
- package/build/exceptions/validation/InvalidValueException.js +9 -0
- package/build/index.d-e5279fea.d.ts +872 -0
- package/build/interfaces/IConstructor.cjs +7 -0
- package/build/interfaces/IConstructor.d.cts +6 -0
- package/build/interfaces/IConstructor.d.ts +6 -0
- package/build/interfaces/IConstructor.js +4 -0
- package/build/interfaces/ILogger.cjs +7 -0
- package/build/interfaces/ILogger.d.cts +22 -0
- package/build/interfaces/ILogger.d.ts +22 -0
- package/build/interfaces/ILogger.js +4 -0
- package/build/interfaces/IPatRun.cjs +7 -0
- package/build/interfaces/IPatRun.d.cts +12 -0
- package/build/interfaces/IPatRun.d.ts +12 -0
- package/build/interfaces/IPatRun.js +4 -0
- package/build/interfaces/ISortArrayOptions.cjs +7 -0
- package/build/interfaces/ISortArrayOptions.d.cts +12 -0
- package/build/interfaces/ISortArrayOptions.d.ts +12 -0
- package/build/interfaces/ISortArrayOptions.js +4 -0
- package/build/interfaces/ISortObjectOptions.cjs +7 -0
- package/build/interfaces/ISortObjectOptions.d.cts +6 -0
- package/build/interfaces/ISortObjectOptions.d.ts +6 -0
- package/build/interfaces/ISortObjectOptions.js +4 -0
- package/build/lib/Application.cjs +50 -0
- package/build/lib/Application.d.cts +20 -0
- package/build/lib/Application.d.ts +20 -0
- package/build/lib/Application.js +41 -0
- package/build/lib/base/BaseObject.cjs +50 -0
- package/build/lib/base/BaseObject.d.cts +112 -0
- package/build/lib/base/BaseObject.d.ts +112 -0
- package/build/lib/base/BaseObject.js +41 -0
- package/build/lib/base/Component.cjs +50 -0
- package/build/lib/base/Component.d.cts +116 -0
- package/build/lib/base/Component.d.ts +116 -0
- package/build/lib/base/Component.js +41 -0
- package/build/lib/base/Container.cjs +50 -0
- package/build/lib/base/Container.d.cts +20 -0
- package/build/lib/base/Container.d.ts +20 -0
- package/build/lib/base/Container.js +41 -0
- package/build/lib/base/Controller.cjs +50 -0
- package/build/lib/base/Controller.d.cts +20 -0
- package/build/lib/base/Controller.d.ts +20 -0
- package/build/lib/base/Controller.js +41 -0
- package/build/lib/base/DTO.cjs +23 -0
- package/build/lib/base/DTO.d.cts +59 -0
- package/build/lib/base/DTO.d.ts +59 -0
- package/build/lib/base/DTO.js +14 -0
- package/build/lib/base/Model.cjs +51 -0
- package/build/lib/base/Model.d.cts +30 -0
- package/build/lib/base/Model.d.ts +30 -0
- package/build/lib/base/Model.js +42 -0
- package/build/lib/base/Module.cjs +50 -0
- package/build/lib/base/Module.d.cts +20 -0
- package/build/lib/base/Module.d.ts +20 -0
- package/build/lib/base/Module.js +41 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.cjs +27 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.d.cts +172 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.d.ts +172 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.js +18 -0
- package/build/lib/base/abstracts/Exception.cjs +17 -0
- package/build/lib/base/abstracts/Exception.d.cts +23 -0
- package/build/lib/base/abstracts/Exception.d.ts +23 -0
- package/build/lib/base/abstracts/Exception.js +8 -0
- package/build/lib/base/abstracts/Interval.cjs +51 -0
- package/build/lib/base/abstracts/Interval.d.cts +76 -0
- package/build/lib/base/abstracts/Interval.d.ts +76 -0
- package/build/lib/base/abstracts/Interval.js +42 -0
- package/build/lib/base/abstracts/SymmetricEncryption.cjs +23 -0
- package/build/lib/base/abstracts/SymmetricEncryption.d.cts +149 -0
- package/build/lib/base/abstracts/SymmetricEncryption.d.ts +149 -0
- package/build/lib/base/abstracts/SymmetricEncryption.js +14 -0
- package/build/lib/base/async-constructor/Append.cjs +14 -0
- package/build/lib/base/async-constructor/Append.d.cts +5 -0
- package/build/lib/base/async-constructor/Append.d.ts +5 -0
- package/build/lib/base/async-constructor/Append.js +5 -0
- package/build/lib/base/async-constructor/AsyncConstructor.cjs +15 -0
- package/build/lib/base/async-constructor/AsyncConstructor.d.cts +7 -0
- package/build/lib/base/async-constructor/AsyncConstructor.d.ts +7 -0
- package/build/lib/base/async-constructor/AsyncConstructor.js +6 -0
- package/build/lib/components/Formatter.cjs +50 -0
- package/build/lib/components/Formatter.d.cts +203 -0
- package/build/lib/components/Formatter.d.ts +203 -0
- package/build/lib/components/Formatter.js +41 -0
- package/build/lib/components/Logger.cjs +50 -0
- package/build/lib/components/Logger.d.cts +61 -0
- package/build/lib/components/Logger.d.ts +61 -0
- package/build/lib/components/Logger.js +41 -0
- package/build/lib/crypto/RSA.cjs +28 -0
- package/build/lib/crypto/RSA.d.cts +61 -0
- package/build/lib/crypto/RSA.d.ts +61 -0
- package/build/lib/crypto/RSA.js +19 -0
- package/build/lib/crypto/SM2.cjs +28 -0
- package/build/lib/crypto/SM2.d.cts +47 -0
- package/build/lib/crypto/SM2.d.ts +47 -0
- package/build/lib/crypto/SM2.js +19 -0
- package/build/lib/crypto/aes/AES128.cjs +25 -0
- package/build/lib/crypto/aes/AES128.d.cts +14 -0
- package/build/lib/crypto/aes/AES128.d.ts +14 -0
- package/build/lib/crypto/aes/AES128.js +16 -0
- package/build/lib/crypto/aes/AES192.cjs +25 -0
- package/build/lib/crypto/aes/AES192.d.cts +14 -0
- package/build/lib/crypto/aes/AES192.d.ts +14 -0
- package/build/lib/crypto/aes/AES192.js +16 -0
- package/build/lib/crypto/aes/AES256.cjs +25 -0
- package/build/lib/crypto/aes/AES256.d.cts +14 -0
- package/build/lib/crypto/aes/AES256.d.ts +14 -0
- package/build/lib/crypto/aes/AES256.js +16 -0
- package/build/lib/crypto/aria/ARIA128.cjs +24 -0
- package/build/lib/crypto/aria/ARIA128.d.cts +13 -0
- package/build/lib/crypto/aria/ARIA128.d.ts +13 -0
- package/build/lib/crypto/aria/ARIA128.js +15 -0
- package/build/lib/crypto/aria/ARIA192.cjs +24 -0
- package/build/lib/crypto/aria/ARIA192.d.cts +13 -0
- package/build/lib/crypto/aria/ARIA192.d.ts +13 -0
- package/build/lib/crypto/aria/ARIA192.js +15 -0
- package/build/lib/crypto/aria/ARIA256.cjs +24 -0
- package/build/lib/crypto/aria/ARIA256.d.cts +13 -0
- package/build/lib/crypto/aria/ARIA256.d.ts +13 -0
- package/build/lib/crypto/aria/ARIA256.js +15 -0
- package/build/lib/crypto/camellia/CAMELLIA128.cjs +24 -0
- package/build/lib/crypto/camellia/CAMELLIA128.d.cts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA128.d.ts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA128.js +15 -0
- package/build/lib/crypto/camellia/CAMELLIA192.cjs +24 -0
- package/build/lib/crypto/camellia/CAMELLIA192.d.cts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA192.d.ts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA192.js +15 -0
- package/build/lib/crypto/camellia/CAMELLIA256.cjs +24 -0
- package/build/lib/crypto/camellia/CAMELLIA256.d.cts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA256.d.ts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA256.js +15 -0
- package/build/lib/crypto/des/DES.cjs +25 -0
- package/build/lib/crypto/des/DES.d.cts +14 -0
- package/build/lib/crypto/des/DES.d.ts +14 -0
- package/build/lib/crypto/des/DES.js +16 -0
- package/build/lib/crypto/des/TripleDES.cjs +25 -0
- package/build/lib/crypto/des/TripleDES.d.cts +14 -0
- package/build/lib/crypto/des/TripleDES.d.ts +14 -0
- package/build/lib/crypto/des/TripleDES.js +16 -0
- package/build/lib/ioc/DependencyInjectionContainer.cjs +29 -0
- package/build/lib/ioc/DependencyInjectionContainer.d.cts +4 -0
- package/build/lib/ioc/DependencyInjectionContainer.d.ts +4 -0
- package/build/lib/ioc/DependencyInjectionContainer.js +20 -0
- package/build/lib/ioc/Errors.cjs +27 -0
- package/build/lib/ioc/Errors.d.cts +53 -0
- package/build/lib/ioc/Errors.d.ts +53 -0
- package/build/lib/ioc/Errors.js +10 -0
- package/build/lib/ioc/FunctionTokenizer.cjs +18 -0
- package/build/lib/ioc/FunctionTokenizer.d.cts +33 -0
- package/build/lib/ioc/FunctionTokenizer.d.ts +33 -0
- package/build/lib/ioc/FunctionTokenizer.js +5 -0
- package/build/lib/ioc/InjectionMode.cjs +14 -0
- package/build/lib/ioc/InjectionMode.d.cts +12 -0
- package/build/lib/ioc/InjectionMode.d.ts +12 -0
- package/build/lib/ioc/InjectionMode.js +5 -0
- package/build/lib/ioc/Lifetime.cjs +14 -0
- package/build/lib/ioc/Lifetime.d.cts +12 -0
- package/build/lib/ioc/Lifetime.d.ts +12 -0
- package/build/lib/ioc/Lifetime.js +5 -0
- package/build/lib/ioc/ListModules.cjs +17 -0
- package/build/lib/ioc/ListModules.d.cts +4 -0
- package/build/lib/ioc/ListModules.d.ts +4 -0
- package/build/lib/ioc/ListModules.js +8 -0
- package/build/lib/ioc/LoadModuleNative.cjs +14 -0
- package/build/lib/ioc/LoadModuleNative.d.cts +9 -0
- package/build/lib/ioc/LoadModuleNative.d.ts +9 -0
- package/build/lib/ioc/LoadModuleNative.js +5 -0
- package/build/lib/ioc/LoadModules.cjs +26 -0
- package/build/lib/ioc/LoadModules.d.cts +4 -0
- package/build/lib/ioc/LoadModules.d.ts +4 -0
- package/build/lib/ioc/LoadModules.js +17 -0
- package/build/lib/ioc/ParamParser.cjs +15 -0
- package/build/lib/ioc/ParamParser.d.cts +25 -0
- package/build/lib/ioc/ParamParser.d.ts +25 -0
- package/build/lib/ioc/ParamParser.js +6 -0
- package/build/lib/ioc/Resolvers.cjs +49 -0
- package/build/lib/ioc/Resolvers.d.cts +4 -0
- package/build/lib/ioc/Resolvers.d.ts +4 -0
- package/build/lib/ioc/Resolvers.js +16 -0
- package/build/lib/ioc/Utils.cjs +35 -0
- package/build/lib/ioc/Utils.d.cts +38 -0
- package/build/lib/ioc/Utils.d.ts +38 -0
- package/build/lib/ioc/Utils.js +6 -0
- package/build/options/ApplicationOptions.cjs +50 -0
- package/build/options/ApplicationOptions.d.cts +20 -0
- package/build/options/ApplicationOptions.d.ts +20 -0
- package/build/options/ApplicationOptions.js +41 -0
- package/build/options/LoadComponentOptions.cjs +50 -0
- package/build/options/LoadComponentOptions.d.cts +22 -0
- package/build/options/LoadComponentOptions.d.ts +22 -0
- package/build/options/LoadComponentOptions.js +41 -0
- package/build/options/LoadEntryClassOptions.cjs +50 -0
- package/build/options/LoadEntryClassOptions.d.cts +16 -0
- package/build/options/LoadEntryClassOptions.d.ts +16 -0
- package/build/options/LoadEntryClassOptions.js +41 -0
- package/build/options/LoadEntryCommonOptions.cjs +27 -0
- package/build/options/LoadEntryCommonOptions.d.cts +13 -0
- package/build/options/LoadEntryCommonOptions.d.ts +13 -0
- package/build/options/LoadEntryCommonOptions.js +18 -0
- package/build/options/LoadModuleOptions.cjs +50 -0
- package/build/options/LoadModuleOptions.d.cts +20 -0
- package/build/options/LoadModuleOptions.d.ts +20 -0
- package/build/options/LoadModuleOptions.js +41 -0
- package/build/options/ModuleOptions.cjs +50 -0
- package/build/options/ModuleOptions.d.cts +20 -0
- package/build/options/ModuleOptions.d.ts +20 -0
- package/build/options/ModuleOptions.js +41 -0
- package/build/types/AsyncFunction.cjs +7 -0
- package/build/types/AsyncFunction.d.cts +3 -0
- package/build/types/AsyncFunction.d.ts +3 -0
- package/build/types/AsyncFunction.js +4 -0
- package/build/types/ControllerActionMapItem.cjs +7 -0
- package/build/types/ControllerActionMapItem.d.cts +20 -0
- package/build/types/ControllerActionMapItem.d.ts +20 -0
- package/build/types/ControllerActionMapItem.js +4 -0
- package/build/types/InjectionProperties.cjs +7 -0
- package/build/types/InjectionProperties.d.cts +3 -0
- package/build/types/InjectionProperties.d.ts +3 -0
- package/build/types/InjectionProperties.js +4 -0
- package/build/types/TimeInput.cjs +7 -0
- package/build/types/TimeInput.d.cts +5 -0
- package/build/types/TimeInput.d.ts +5 -0
- package/build/types/TimeInput.js +4 -0
- package/build/types/TimeObject.cjs +7 -0
- package/build/types/TimeObject.d.cts +11 -0
- package/build/types/TimeObject.d.ts +11 -0
- package/build/types/TimeObject.js +4 -0
- package/build/types/UnitOfTime.cjs +7 -0
- package/build/types/UnitOfTime.d.cts +14 -0
- package/build/types/UnitOfTime.d.ts +14 -0
- package/build/types/UnitOfTime.js +4 -0
- package/package.json +145 -0
|
@@ -0,0 +1,868 @@
|
|
|
1
|
+
import { init_esm_shims, __name } from './chunk-5NK7E2HA.js';
|
|
2
|
+
|
|
3
|
+
// node_modules/reflect-metadata/Reflect.js
|
|
4
|
+
init_esm_shims();
|
|
5
|
+
var Reflect;
|
|
6
|
+
(function(Reflect2) {
|
|
7
|
+
(function(factory) {
|
|
8
|
+
var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : Function("return this;")();
|
|
9
|
+
var exporter = makeExporter(Reflect2);
|
|
10
|
+
if (typeof root.Reflect === "undefined") {
|
|
11
|
+
root.Reflect = Reflect2;
|
|
12
|
+
} else {
|
|
13
|
+
exporter = makeExporter(root.Reflect, exporter);
|
|
14
|
+
}
|
|
15
|
+
factory(exporter);
|
|
16
|
+
function makeExporter(target, previous) {
|
|
17
|
+
return function(key, value) {
|
|
18
|
+
if (typeof target[key] !== "function") {
|
|
19
|
+
Object.defineProperty(target, key, { configurable: true, writable: true, value });
|
|
20
|
+
}
|
|
21
|
+
if (previous)
|
|
22
|
+
previous(key, value);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
__name(makeExporter, "makeExporter");
|
|
26
|
+
})(function(exporter) {
|
|
27
|
+
var hasOwn = Object.prototype.hasOwnProperty;
|
|
28
|
+
var supportsSymbol = typeof Symbol === "function";
|
|
29
|
+
var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== "undefined" ? Symbol.toPrimitive : "@@toPrimitive";
|
|
30
|
+
var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== "undefined" ? Symbol.iterator : "@@iterator";
|
|
31
|
+
var supportsCreate = typeof Object.create === "function";
|
|
32
|
+
var supportsProto = { __proto__: [] } instanceof Array;
|
|
33
|
+
var downLevel = !supportsCreate && !supportsProto;
|
|
34
|
+
var HashMap = {
|
|
35
|
+
// create an object in dictionary mode (a.k.a. "slow" mode in v8)
|
|
36
|
+
create: supportsCreate ? function() {
|
|
37
|
+
return MakeDictionary(/* @__PURE__ */ Object.create(null));
|
|
38
|
+
} : supportsProto ? function() {
|
|
39
|
+
return MakeDictionary({ __proto__: null });
|
|
40
|
+
} : function() {
|
|
41
|
+
return MakeDictionary({});
|
|
42
|
+
},
|
|
43
|
+
has: downLevel ? function(map, key) {
|
|
44
|
+
return hasOwn.call(map, key);
|
|
45
|
+
} : function(map, key) {
|
|
46
|
+
return key in map;
|
|
47
|
+
},
|
|
48
|
+
get: downLevel ? function(map, key) {
|
|
49
|
+
return hasOwn.call(map, key) ? map[key] : void 0;
|
|
50
|
+
} : function(map, key) {
|
|
51
|
+
return map[key];
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
var functionPrototype = Object.getPrototypeOf(Function);
|
|
55
|
+
var usePolyfill = typeof process === "object" && process.env && process.env["REFLECT_METADATA_USE_MAP_POLYFILL"] === "true";
|
|
56
|
+
var _Map = !usePolyfill && typeof Map === "function" && typeof Map.prototype.entries === "function" ? Map : CreateMapPolyfill();
|
|
57
|
+
var _Set = !usePolyfill && typeof Set === "function" && typeof Set.prototype.entries === "function" ? Set : CreateSetPolyfill();
|
|
58
|
+
var _WeakMap = !usePolyfill && typeof WeakMap === "function" ? WeakMap : CreateWeakMapPolyfill();
|
|
59
|
+
var Metadata = new _WeakMap();
|
|
60
|
+
function decorate(decorators, target, propertyKey, attributes) {
|
|
61
|
+
if (!IsUndefined(propertyKey)) {
|
|
62
|
+
if (!IsArray(decorators))
|
|
63
|
+
throw new TypeError();
|
|
64
|
+
if (!IsObject(target))
|
|
65
|
+
throw new TypeError();
|
|
66
|
+
if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))
|
|
67
|
+
throw new TypeError();
|
|
68
|
+
if (IsNull(attributes))
|
|
69
|
+
attributes = void 0;
|
|
70
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
71
|
+
return DecorateProperty(decorators, target, propertyKey, attributes);
|
|
72
|
+
} else {
|
|
73
|
+
if (!IsArray(decorators))
|
|
74
|
+
throw new TypeError();
|
|
75
|
+
if (!IsConstructor(target))
|
|
76
|
+
throw new TypeError();
|
|
77
|
+
return DecorateConstructor(decorators, target);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
__name(decorate, "decorate");
|
|
81
|
+
exporter("decorate", decorate);
|
|
82
|
+
function metadata(metadataKey, metadataValue) {
|
|
83
|
+
function decorator(target, propertyKey) {
|
|
84
|
+
if (!IsObject(target))
|
|
85
|
+
throw new TypeError();
|
|
86
|
+
if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))
|
|
87
|
+
throw new TypeError();
|
|
88
|
+
OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);
|
|
89
|
+
}
|
|
90
|
+
__name(decorator, "decorator");
|
|
91
|
+
return decorator;
|
|
92
|
+
}
|
|
93
|
+
__name(metadata, "metadata");
|
|
94
|
+
exporter("metadata", metadata);
|
|
95
|
+
function defineMetadata(metadataKey, metadataValue, target, propertyKey) {
|
|
96
|
+
if (!IsObject(target))
|
|
97
|
+
throw new TypeError();
|
|
98
|
+
if (!IsUndefined(propertyKey))
|
|
99
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
100
|
+
return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);
|
|
101
|
+
}
|
|
102
|
+
__name(defineMetadata, "defineMetadata");
|
|
103
|
+
exporter("defineMetadata", defineMetadata);
|
|
104
|
+
function hasMetadata(metadataKey, target, propertyKey) {
|
|
105
|
+
if (!IsObject(target))
|
|
106
|
+
throw new TypeError();
|
|
107
|
+
if (!IsUndefined(propertyKey))
|
|
108
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
109
|
+
return OrdinaryHasMetadata(metadataKey, target, propertyKey);
|
|
110
|
+
}
|
|
111
|
+
__name(hasMetadata, "hasMetadata");
|
|
112
|
+
exporter("hasMetadata", hasMetadata);
|
|
113
|
+
function hasOwnMetadata(metadataKey, target, propertyKey) {
|
|
114
|
+
if (!IsObject(target))
|
|
115
|
+
throw new TypeError();
|
|
116
|
+
if (!IsUndefined(propertyKey))
|
|
117
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
118
|
+
return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);
|
|
119
|
+
}
|
|
120
|
+
__name(hasOwnMetadata, "hasOwnMetadata");
|
|
121
|
+
exporter("hasOwnMetadata", hasOwnMetadata);
|
|
122
|
+
function getMetadata(metadataKey, target, propertyKey) {
|
|
123
|
+
if (!IsObject(target))
|
|
124
|
+
throw new TypeError();
|
|
125
|
+
if (!IsUndefined(propertyKey))
|
|
126
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
127
|
+
return OrdinaryGetMetadata(metadataKey, target, propertyKey);
|
|
128
|
+
}
|
|
129
|
+
__name(getMetadata, "getMetadata");
|
|
130
|
+
exporter("getMetadata", getMetadata);
|
|
131
|
+
function getOwnMetadata(metadataKey, target, propertyKey) {
|
|
132
|
+
if (!IsObject(target))
|
|
133
|
+
throw new TypeError();
|
|
134
|
+
if (!IsUndefined(propertyKey))
|
|
135
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
136
|
+
return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);
|
|
137
|
+
}
|
|
138
|
+
__name(getOwnMetadata, "getOwnMetadata");
|
|
139
|
+
exporter("getOwnMetadata", getOwnMetadata);
|
|
140
|
+
function getMetadataKeys(target, propertyKey) {
|
|
141
|
+
if (!IsObject(target))
|
|
142
|
+
throw new TypeError();
|
|
143
|
+
if (!IsUndefined(propertyKey))
|
|
144
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
145
|
+
return OrdinaryMetadataKeys(target, propertyKey);
|
|
146
|
+
}
|
|
147
|
+
__name(getMetadataKeys, "getMetadataKeys");
|
|
148
|
+
exporter("getMetadataKeys", getMetadataKeys);
|
|
149
|
+
function getOwnMetadataKeys(target, propertyKey) {
|
|
150
|
+
if (!IsObject(target))
|
|
151
|
+
throw new TypeError();
|
|
152
|
+
if (!IsUndefined(propertyKey))
|
|
153
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
154
|
+
return OrdinaryOwnMetadataKeys(target, propertyKey);
|
|
155
|
+
}
|
|
156
|
+
__name(getOwnMetadataKeys, "getOwnMetadataKeys");
|
|
157
|
+
exporter("getOwnMetadataKeys", getOwnMetadataKeys);
|
|
158
|
+
function deleteMetadata(metadataKey, target, propertyKey) {
|
|
159
|
+
if (!IsObject(target))
|
|
160
|
+
throw new TypeError();
|
|
161
|
+
if (!IsUndefined(propertyKey))
|
|
162
|
+
propertyKey = ToPropertyKey(propertyKey);
|
|
163
|
+
var metadataMap = GetOrCreateMetadataMap(
|
|
164
|
+
target,
|
|
165
|
+
propertyKey,
|
|
166
|
+
/*Create*/
|
|
167
|
+
false
|
|
168
|
+
);
|
|
169
|
+
if (IsUndefined(metadataMap))
|
|
170
|
+
return false;
|
|
171
|
+
if (!metadataMap.delete(metadataKey))
|
|
172
|
+
return false;
|
|
173
|
+
if (metadataMap.size > 0)
|
|
174
|
+
return true;
|
|
175
|
+
var targetMetadata = Metadata.get(target);
|
|
176
|
+
targetMetadata.delete(propertyKey);
|
|
177
|
+
if (targetMetadata.size > 0)
|
|
178
|
+
return true;
|
|
179
|
+
Metadata.delete(target);
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
__name(deleteMetadata, "deleteMetadata");
|
|
183
|
+
exporter("deleteMetadata", deleteMetadata);
|
|
184
|
+
function DecorateConstructor(decorators, target) {
|
|
185
|
+
for (var i = decorators.length - 1; i >= 0; --i) {
|
|
186
|
+
var decorator = decorators[i];
|
|
187
|
+
var decorated = decorator(target);
|
|
188
|
+
if (!IsUndefined(decorated) && !IsNull(decorated)) {
|
|
189
|
+
if (!IsConstructor(decorated))
|
|
190
|
+
throw new TypeError();
|
|
191
|
+
target = decorated;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return target;
|
|
195
|
+
}
|
|
196
|
+
__name(DecorateConstructor, "DecorateConstructor");
|
|
197
|
+
function DecorateProperty(decorators, target, propertyKey, descriptor) {
|
|
198
|
+
for (var i = decorators.length - 1; i >= 0; --i) {
|
|
199
|
+
var decorator = decorators[i];
|
|
200
|
+
var decorated = decorator(target, propertyKey, descriptor);
|
|
201
|
+
if (!IsUndefined(decorated) && !IsNull(decorated)) {
|
|
202
|
+
if (!IsObject(decorated))
|
|
203
|
+
throw new TypeError();
|
|
204
|
+
descriptor = decorated;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return descriptor;
|
|
208
|
+
}
|
|
209
|
+
__name(DecorateProperty, "DecorateProperty");
|
|
210
|
+
function GetOrCreateMetadataMap(O, P, Create) {
|
|
211
|
+
var targetMetadata = Metadata.get(O);
|
|
212
|
+
if (IsUndefined(targetMetadata)) {
|
|
213
|
+
if (!Create)
|
|
214
|
+
return void 0;
|
|
215
|
+
targetMetadata = new _Map();
|
|
216
|
+
Metadata.set(O, targetMetadata);
|
|
217
|
+
}
|
|
218
|
+
var metadataMap = targetMetadata.get(P);
|
|
219
|
+
if (IsUndefined(metadataMap)) {
|
|
220
|
+
if (!Create)
|
|
221
|
+
return void 0;
|
|
222
|
+
metadataMap = new _Map();
|
|
223
|
+
targetMetadata.set(P, metadataMap);
|
|
224
|
+
}
|
|
225
|
+
return metadataMap;
|
|
226
|
+
}
|
|
227
|
+
__name(GetOrCreateMetadataMap, "GetOrCreateMetadataMap");
|
|
228
|
+
function OrdinaryHasMetadata(MetadataKey, O, P) {
|
|
229
|
+
var hasOwn2 = OrdinaryHasOwnMetadata(MetadataKey, O, P);
|
|
230
|
+
if (hasOwn2)
|
|
231
|
+
return true;
|
|
232
|
+
var parent = OrdinaryGetPrototypeOf(O);
|
|
233
|
+
if (!IsNull(parent))
|
|
234
|
+
return OrdinaryHasMetadata(MetadataKey, parent, P);
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
__name(OrdinaryHasMetadata, "OrdinaryHasMetadata");
|
|
238
|
+
function OrdinaryHasOwnMetadata(MetadataKey, O, P) {
|
|
239
|
+
var metadataMap = GetOrCreateMetadataMap(
|
|
240
|
+
O,
|
|
241
|
+
P,
|
|
242
|
+
/*Create*/
|
|
243
|
+
false
|
|
244
|
+
);
|
|
245
|
+
if (IsUndefined(metadataMap))
|
|
246
|
+
return false;
|
|
247
|
+
return ToBoolean(metadataMap.has(MetadataKey));
|
|
248
|
+
}
|
|
249
|
+
__name(OrdinaryHasOwnMetadata, "OrdinaryHasOwnMetadata");
|
|
250
|
+
function OrdinaryGetMetadata(MetadataKey, O, P) {
|
|
251
|
+
var hasOwn2 = OrdinaryHasOwnMetadata(MetadataKey, O, P);
|
|
252
|
+
if (hasOwn2)
|
|
253
|
+
return OrdinaryGetOwnMetadata(MetadataKey, O, P);
|
|
254
|
+
var parent = OrdinaryGetPrototypeOf(O);
|
|
255
|
+
if (!IsNull(parent))
|
|
256
|
+
return OrdinaryGetMetadata(MetadataKey, parent, P);
|
|
257
|
+
return void 0;
|
|
258
|
+
}
|
|
259
|
+
__name(OrdinaryGetMetadata, "OrdinaryGetMetadata");
|
|
260
|
+
function OrdinaryGetOwnMetadata(MetadataKey, O, P) {
|
|
261
|
+
var metadataMap = GetOrCreateMetadataMap(
|
|
262
|
+
O,
|
|
263
|
+
P,
|
|
264
|
+
/*Create*/
|
|
265
|
+
false
|
|
266
|
+
);
|
|
267
|
+
if (IsUndefined(metadataMap))
|
|
268
|
+
return void 0;
|
|
269
|
+
return metadataMap.get(MetadataKey);
|
|
270
|
+
}
|
|
271
|
+
__name(OrdinaryGetOwnMetadata, "OrdinaryGetOwnMetadata");
|
|
272
|
+
function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {
|
|
273
|
+
var metadataMap = GetOrCreateMetadataMap(
|
|
274
|
+
O,
|
|
275
|
+
P,
|
|
276
|
+
/*Create*/
|
|
277
|
+
true
|
|
278
|
+
);
|
|
279
|
+
metadataMap.set(MetadataKey, MetadataValue);
|
|
280
|
+
}
|
|
281
|
+
__name(OrdinaryDefineOwnMetadata, "OrdinaryDefineOwnMetadata");
|
|
282
|
+
function OrdinaryMetadataKeys(O, P) {
|
|
283
|
+
var ownKeys = OrdinaryOwnMetadataKeys(O, P);
|
|
284
|
+
var parent = OrdinaryGetPrototypeOf(O);
|
|
285
|
+
if (parent === null)
|
|
286
|
+
return ownKeys;
|
|
287
|
+
var parentKeys = OrdinaryMetadataKeys(parent, P);
|
|
288
|
+
if (parentKeys.length <= 0)
|
|
289
|
+
return ownKeys;
|
|
290
|
+
if (ownKeys.length <= 0)
|
|
291
|
+
return parentKeys;
|
|
292
|
+
var set = new _Set();
|
|
293
|
+
var keys = [];
|
|
294
|
+
for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {
|
|
295
|
+
var key = ownKeys_1[_i];
|
|
296
|
+
var hasKey = set.has(key);
|
|
297
|
+
if (!hasKey) {
|
|
298
|
+
set.add(key);
|
|
299
|
+
keys.push(key);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {
|
|
303
|
+
var key = parentKeys_1[_a];
|
|
304
|
+
var hasKey = set.has(key);
|
|
305
|
+
if (!hasKey) {
|
|
306
|
+
set.add(key);
|
|
307
|
+
keys.push(key);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return keys;
|
|
311
|
+
}
|
|
312
|
+
__name(OrdinaryMetadataKeys, "OrdinaryMetadataKeys");
|
|
313
|
+
function OrdinaryOwnMetadataKeys(O, P) {
|
|
314
|
+
var keys = [];
|
|
315
|
+
var metadataMap = GetOrCreateMetadataMap(
|
|
316
|
+
O,
|
|
317
|
+
P,
|
|
318
|
+
/*Create*/
|
|
319
|
+
false
|
|
320
|
+
);
|
|
321
|
+
if (IsUndefined(metadataMap))
|
|
322
|
+
return keys;
|
|
323
|
+
var keysObj = metadataMap.keys();
|
|
324
|
+
var iterator = GetIterator(keysObj);
|
|
325
|
+
var k = 0;
|
|
326
|
+
while (true) {
|
|
327
|
+
var next = IteratorStep(iterator);
|
|
328
|
+
if (!next) {
|
|
329
|
+
keys.length = k;
|
|
330
|
+
return keys;
|
|
331
|
+
}
|
|
332
|
+
var nextValue = IteratorValue(next);
|
|
333
|
+
try {
|
|
334
|
+
keys[k] = nextValue;
|
|
335
|
+
} catch (e) {
|
|
336
|
+
try {
|
|
337
|
+
IteratorClose(iterator);
|
|
338
|
+
} finally {
|
|
339
|
+
throw e;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
k++;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
__name(OrdinaryOwnMetadataKeys, "OrdinaryOwnMetadataKeys");
|
|
346
|
+
function Type(x) {
|
|
347
|
+
if (x === null)
|
|
348
|
+
return 1;
|
|
349
|
+
switch (typeof x) {
|
|
350
|
+
case "undefined":
|
|
351
|
+
return 0;
|
|
352
|
+
case "boolean":
|
|
353
|
+
return 2;
|
|
354
|
+
case "string":
|
|
355
|
+
return 3;
|
|
356
|
+
case "symbol":
|
|
357
|
+
return 4;
|
|
358
|
+
case "number":
|
|
359
|
+
return 5;
|
|
360
|
+
case "object":
|
|
361
|
+
return x === null ? 1 : 6;
|
|
362
|
+
default:
|
|
363
|
+
return 6;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
__name(Type, "Type");
|
|
367
|
+
function IsUndefined(x) {
|
|
368
|
+
return x === void 0;
|
|
369
|
+
}
|
|
370
|
+
__name(IsUndefined, "IsUndefined");
|
|
371
|
+
function IsNull(x) {
|
|
372
|
+
return x === null;
|
|
373
|
+
}
|
|
374
|
+
__name(IsNull, "IsNull");
|
|
375
|
+
function IsSymbol(x) {
|
|
376
|
+
return typeof x === "symbol";
|
|
377
|
+
}
|
|
378
|
+
__name(IsSymbol, "IsSymbol");
|
|
379
|
+
function IsObject(x) {
|
|
380
|
+
return typeof x === "object" ? x !== null : typeof x === "function";
|
|
381
|
+
}
|
|
382
|
+
__name(IsObject, "IsObject");
|
|
383
|
+
function ToPrimitive(input, PreferredType) {
|
|
384
|
+
switch (Type(input)) {
|
|
385
|
+
case 0:
|
|
386
|
+
return input;
|
|
387
|
+
case 1:
|
|
388
|
+
return input;
|
|
389
|
+
case 2:
|
|
390
|
+
return input;
|
|
391
|
+
case 3:
|
|
392
|
+
return input;
|
|
393
|
+
case 4:
|
|
394
|
+
return input;
|
|
395
|
+
case 5:
|
|
396
|
+
return input;
|
|
397
|
+
}
|
|
398
|
+
var hint = PreferredType === 3 ? "string" : PreferredType === 5 ? "number" : "default";
|
|
399
|
+
var exoticToPrim = GetMethod(input, toPrimitiveSymbol);
|
|
400
|
+
if (exoticToPrim !== void 0) {
|
|
401
|
+
var result = exoticToPrim.call(input, hint);
|
|
402
|
+
if (IsObject(result))
|
|
403
|
+
throw new TypeError();
|
|
404
|
+
return result;
|
|
405
|
+
}
|
|
406
|
+
return OrdinaryToPrimitive(input, hint === "default" ? "number" : hint);
|
|
407
|
+
}
|
|
408
|
+
__name(ToPrimitive, "ToPrimitive");
|
|
409
|
+
function OrdinaryToPrimitive(O, hint) {
|
|
410
|
+
if (hint === "string") {
|
|
411
|
+
var toString_1 = O.toString;
|
|
412
|
+
if (IsCallable(toString_1)) {
|
|
413
|
+
var result = toString_1.call(O);
|
|
414
|
+
if (!IsObject(result))
|
|
415
|
+
return result;
|
|
416
|
+
}
|
|
417
|
+
var valueOf = O.valueOf;
|
|
418
|
+
if (IsCallable(valueOf)) {
|
|
419
|
+
var result = valueOf.call(O);
|
|
420
|
+
if (!IsObject(result))
|
|
421
|
+
return result;
|
|
422
|
+
}
|
|
423
|
+
} else {
|
|
424
|
+
var valueOf = O.valueOf;
|
|
425
|
+
if (IsCallable(valueOf)) {
|
|
426
|
+
var result = valueOf.call(O);
|
|
427
|
+
if (!IsObject(result))
|
|
428
|
+
return result;
|
|
429
|
+
}
|
|
430
|
+
var toString_2 = O.toString;
|
|
431
|
+
if (IsCallable(toString_2)) {
|
|
432
|
+
var result = toString_2.call(O);
|
|
433
|
+
if (!IsObject(result))
|
|
434
|
+
return result;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
throw new TypeError();
|
|
438
|
+
}
|
|
439
|
+
__name(OrdinaryToPrimitive, "OrdinaryToPrimitive");
|
|
440
|
+
function ToBoolean(argument) {
|
|
441
|
+
return !!argument;
|
|
442
|
+
}
|
|
443
|
+
__name(ToBoolean, "ToBoolean");
|
|
444
|
+
function ToString(argument) {
|
|
445
|
+
return "" + argument;
|
|
446
|
+
}
|
|
447
|
+
__name(ToString, "ToString");
|
|
448
|
+
function ToPropertyKey(argument) {
|
|
449
|
+
var key = ToPrimitive(
|
|
450
|
+
argument,
|
|
451
|
+
3
|
|
452
|
+
/* String */
|
|
453
|
+
);
|
|
454
|
+
if (IsSymbol(key))
|
|
455
|
+
return key;
|
|
456
|
+
return ToString(key);
|
|
457
|
+
}
|
|
458
|
+
__name(ToPropertyKey, "ToPropertyKey");
|
|
459
|
+
function IsArray(argument) {
|
|
460
|
+
return Array.isArray ? Array.isArray(argument) : argument instanceof Object ? argument instanceof Array : Object.prototype.toString.call(argument) === "[object Array]";
|
|
461
|
+
}
|
|
462
|
+
__name(IsArray, "IsArray");
|
|
463
|
+
function IsCallable(argument) {
|
|
464
|
+
return typeof argument === "function";
|
|
465
|
+
}
|
|
466
|
+
__name(IsCallable, "IsCallable");
|
|
467
|
+
function IsConstructor(argument) {
|
|
468
|
+
return typeof argument === "function";
|
|
469
|
+
}
|
|
470
|
+
__name(IsConstructor, "IsConstructor");
|
|
471
|
+
function IsPropertyKey(argument) {
|
|
472
|
+
switch (Type(argument)) {
|
|
473
|
+
case 3:
|
|
474
|
+
return true;
|
|
475
|
+
case 4:
|
|
476
|
+
return true;
|
|
477
|
+
default:
|
|
478
|
+
return false;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
__name(IsPropertyKey, "IsPropertyKey");
|
|
482
|
+
function GetMethod(V, P) {
|
|
483
|
+
var func = V[P];
|
|
484
|
+
if (func === void 0 || func === null)
|
|
485
|
+
return void 0;
|
|
486
|
+
if (!IsCallable(func))
|
|
487
|
+
throw new TypeError();
|
|
488
|
+
return func;
|
|
489
|
+
}
|
|
490
|
+
__name(GetMethod, "GetMethod");
|
|
491
|
+
function GetIterator(obj) {
|
|
492
|
+
var method = GetMethod(obj, iteratorSymbol);
|
|
493
|
+
if (!IsCallable(method))
|
|
494
|
+
throw new TypeError();
|
|
495
|
+
var iterator = method.call(obj);
|
|
496
|
+
if (!IsObject(iterator))
|
|
497
|
+
throw new TypeError();
|
|
498
|
+
return iterator;
|
|
499
|
+
}
|
|
500
|
+
__name(GetIterator, "GetIterator");
|
|
501
|
+
function IteratorValue(iterResult) {
|
|
502
|
+
return iterResult.value;
|
|
503
|
+
}
|
|
504
|
+
__name(IteratorValue, "IteratorValue");
|
|
505
|
+
function IteratorStep(iterator) {
|
|
506
|
+
var result = iterator.next();
|
|
507
|
+
return result.done ? false : result;
|
|
508
|
+
}
|
|
509
|
+
__name(IteratorStep, "IteratorStep");
|
|
510
|
+
function IteratorClose(iterator) {
|
|
511
|
+
var f = iterator["return"];
|
|
512
|
+
if (f)
|
|
513
|
+
f.call(iterator);
|
|
514
|
+
}
|
|
515
|
+
__name(IteratorClose, "IteratorClose");
|
|
516
|
+
function OrdinaryGetPrototypeOf(O) {
|
|
517
|
+
var proto = Object.getPrototypeOf(O);
|
|
518
|
+
if (typeof O !== "function" || O === functionPrototype)
|
|
519
|
+
return proto;
|
|
520
|
+
if (proto !== functionPrototype)
|
|
521
|
+
return proto;
|
|
522
|
+
var prototype = O.prototype;
|
|
523
|
+
var prototypeProto = prototype && Object.getPrototypeOf(prototype);
|
|
524
|
+
if (prototypeProto == null || prototypeProto === Object.prototype)
|
|
525
|
+
return proto;
|
|
526
|
+
var constructor = prototypeProto.constructor;
|
|
527
|
+
if (typeof constructor !== "function")
|
|
528
|
+
return proto;
|
|
529
|
+
if (constructor === O)
|
|
530
|
+
return proto;
|
|
531
|
+
return constructor;
|
|
532
|
+
}
|
|
533
|
+
__name(OrdinaryGetPrototypeOf, "OrdinaryGetPrototypeOf");
|
|
534
|
+
function CreateMapPolyfill() {
|
|
535
|
+
var cacheSentinel = {};
|
|
536
|
+
var arraySentinel = [];
|
|
537
|
+
var MapIterator = (
|
|
538
|
+
/** @class */
|
|
539
|
+
function() {
|
|
540
|
+
function MapIterator2(keys, values, selector) {
|
|
541
|
+
this._index = 0;
|
|
542
|
+
this._keys = keys;
|
|
543
|
+
this._values = values;
|
|
544
|
+
this._selector = selector;
|
|
545
|
+
}
|
|
546
|
+
__name(MapIterator2, "MapIterator");
|
|
547
|
+
MapIterator2.prototype["@@iterator"] = function() {
|
|
548
|
+
return this;
|
|
549
|
+
};
|
|
550
|
+
MapIterator2.prototype[iteratorSymbol] = function() {
|
|
551
|
+
return this;
|
|
552
|
+
};
|
|
553
|
+
MapIterator2.prototype.next = function() {
|
|
554
|
+
var index = this._index;
|
|
555
|
+
if (index >= 0 && index < this._keys.length) {
|
|
556
|
+
var result = this._selector(this._keys[index], this._values[index]);
|
|
557
|
+
if (index + 1 >= this._keys.length) {
|
|
558
|
+
this._index = -1;
|
|
559
|
+
this._keys = arraySentinel;
|
|
560
|
+
this._values = arraySentinel;
|
|
561
|
+
} else {
|
|
562
|
+
this._index++;
|
|
563
|
+
}
|
|
564
|
+
return { value: result, done: false };
|
|
565
|
+
}
|
|
566
|
+
return { value: void 0, done: true };
|
|
567
|
+
};
|
|
568
|
+
MapIterator2.prototype.throw = function(error) {
|
|
569
|
+
if (this._index >= 0) {
|
|
570
|
+
this._index = -1;
|
|
571
|
+
this._keys = arraySentinel;
|
|
572
|
+
this._values = arraySentinel;
|
|
573
|
+
}
|
|
574
|
+
throw error;
|
|
575
|
+
};
|
|
576
|
+
MapIterator2.prototype.return = function(value) {
|
|
577
|
+
if (this._index >= 0) {
|
|
578
|
+
this._index = -1;
|
|
579
|
+
this._keys = arraySentinel;
|
|
580
|
+
this._values = arraySentinel;
|
|
581
|
+
}
|
|
582
|
+
return { value, done: true };
|
|
583
|
+
};
|
|
584
|
+
return MapIterator2;
|
|
585
|
+
}()
|
|
586
|
+
);
|
|
587
|
+
return (
|
|
588
|
+
/** @class */
|
|
589
|
+
function() {
|
|
590
|
+
function Map2() {
|
|
591
|
+
this._keys = [];
|
|
592
|
+
this._values = [];
|
|
593
|
+
this._cacheKey = cacheSentinel;
|
|
594
|
+
this._cacheIndex = -2;
|
|
595
|
+
}
|
|
596
|
+
__name(Map2, "Map");
|
|
597
|
+
Object.defineProperty(Map2.prototype, "size", {
|
|
598
|
+
get: function() {
|
|
599
|
+
return this._keys.length;
|
|
600
|
+
},
|
|
601
|
+
enumerable: true,
|
|
602
|
+
configurable: true
|
|
603
|
+
});
|
|
604
|
+
Map2.prototype.has = function(key) {
|
|
605
|
+
return this._find(
|
|
606
|
+
key,
|
|
607
|
+
/*insert*/
|
|
608
|
+
false
|
|
609
|
+
) >= 0;
|
|
610
|
+
};
|
|
611
|
+
Map2.prototype.get = function(key) {
|
|
612
|
+
var index = this._find(
|
|
613
|
+
key,
|
|
614
|
+
/*insert*/
|
|
615
|
+
false
|
|
616
|
+
);
|
|
617
|
+
return index >= 0 ? this._values[index] : void 0;
|
|
618
|
+
};
|
|
619
|
+
Map2.prototype.set = function(key, value) {
|
|
620
|
+
var index = this._find(
|
|
621
|
+
key,
|
|
622
|
+
/*insert*/
|
|
623
|
+
true
|
|
624
|
+
);
|
|
625
|
+
this._values[index] = value;
|
|
626
|
+
return this;
|
|
627
|
+
};
|
|
628
|
+
Map2.prototype.delete = function(key) {
|
|
629
|
+
var index = this._find(
|
|
630
|
+
key,
|
|
631
|
+
/*insert*/
|
|
632
|
+
false
|
|
633
|
+
);
|
|
634
|
+
if (index >= 0) {
|
|
635
|
+
var size = this._keys.length;
|
|
636
|
+
for (var i = index + 1; i < size; i++) {
|
|
637
|
+
this._keys[i - 1] = this._keys[i];
|
|
638
|
+
this._values[i - 1] = this._values[i];
|
|
639
|
+
}
|
|
640
|
+
this._keys.length--;
|
|
641
|
+
this._values.length--;
|
|
642
|
+
if (key === this._cacheKey) {
|
|
643
|
+
this._cacheKey = cacheSentinel;
|
|
644
|
+
this._cacheIndex = -2;
|
|
645
|
+
}
|
|
646
|
+
return true;
|
|
647
|
+
}
|
|
648
|
+
return false;
|
|
649
|
+
};
|
|
650
|
+
Map2.prototype.clear = function() {
|
|
651
|
+
this._keys.length = 0;
|
|
652
|
+
this._values.length = 0;
|
|
653
|
+
this._cacheKey = cacheSentinel;
|
|
654
|
+
this._cacheIndex = -2;
|
|
655
|
+
};
|
|
656
|
+
Map2.prototype.keys = function() {
|
|
657
|
+
return new MapIterator(this._keys, this._values, getKey);
|
|
658
|
+
};
|
|
659
|
+
Map2.prototype.values = function() {
|
|
660
|
+
return new MapIterator(this._keys, this._values, getValue);
|
|
661
|
+
};
|
|
662
|
+
Map2.prototype.entries = function() {
|
|
663
|
+
return new MapIterator(this._keys, this._values, getEntry);
|
|
664
|
+
};
|
|
665
|
+
Map2.prototype["@@iterator"] = function() {
|
|
666
|
+
return this.entries();
|
|
667
|
+
};
|
|
668
|
+
Map2.prototype[iteratorSymbol] = function() {
|
|
669
|
+
return this.entries();
|
|
670
|
+
};
|
|
671
|
+
Map2.prototype._find = function(key, insert) {
|
|
672
|
+
if (this._cacheKey !== key) {
|
|
673
|
+
this._cacheIndex = this._keys.indexOf(this._cacheKey = key);
|
|
674
|
+
}
|
|
675
|
+
if (this._cacheIndex < 0 && insert) {
|
|
676
|
+
this._cacheIndex = this._keys.length;
|
|
677
|
+
this._keys.push(key);
|
|
678
|
+
this._values.push(void 0);
|
|
679
|
+
}
|
|
680
|
+
return this._cacheIndex;
|
|
681
|
+
};
|
|
682
|
+
return Map2;
|
|
683
|
+
}()
|
|
684
|
+
);
|
|
685
|
+
function getKey(key, _) {
|
|
686
|
+
return key;
|
|
687
|
+
}
|
|
688
|
+
function getValue(_, value) {
|
|
689
|
+
return value;
|
|
690
|
+
}
|
|
691
|
+
function getEntry(key, value) {
|
|
692
|
+
return [key, value];
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
__name(CreateMapPolyfill, "CreateMapPolyfill");
|
|
696
|
+
function CreateSetPolyfill() {
|
|
697
|
+
return (
|
|
698
|
+
/** @class */
|
|
699
|
+
function() {
|
|
700
|
+
function Set2() {
|
|
701
|
+
this._map = new _Map();
|
|
702
|
+
}
|
|
703
|
+
__name(Set2, "Set");
|
|
704
|
+
Object.defineProperty(Set2.prototype, "size", {
|
|
705
|
+
get: function() {
|
|
706
|
+
return this._map.size;
|
|
707
|
+
},
|
|
708
|
+
enumerable: true,
|
|
709
|
+
configurable: true
|
|
710
|
+
});
|
|
711
|
+
Set2.prototype.has = function(value) {
|
|
712
|
+
return this._map.has(value);
|
|
713
|
+
};
|
|
714
|
+
Set2.prototype.add = function(value) {
|
|
715
|
+
return this._map.set(value, value), this;
|
|
716
|
+
};
|
|
717
|
+
Set2.prototype.delete = function(value) {
|
|
718
|
+
return this._map.delete(value);
|
|
719
|
+
};
|
|
720
|
+
Set2.prototype.clear = function() {
|
|
721
|
+
this._map.clear();
|
|
722
|
+
};
|
|
723
|
+
Set2.prototype.keys = function() {
|
|
724
|
+
return this._map.keys();
|
|
725
|
+
};
|
|
726
|
+
Set2.prototype.values = function() {
|
|
727
|
+
return this._map.values();
|
|
728
|
+
};
|
|
729
|
+
Set2.prototype.entries = function() {
|
|
730
|
+
return this._map.entries();
|
|
731
|
+
};
|
|
732
|
+
Set2.prototype["@@iterator"] = function() {
|
|
733
|
+
return this.keys();
|
|
734
|
+
};
|
|
735
|
+
Set2.prototype[iteratorSymbol] = function() {
|
|
736
|
+
return this.keys();
|
|
737
|
+
};
|
|
738
|
+
return Set2;
|
|
739
|
+
}()
|
|
740
|
+
);
|
|
741
|
+
}
|
|
742
|
+
__name(CreateSetPolyfill, "CreateSetPolyfill");
|
|
743
|
+
function CreateWeakMapPolyfill() {
|
|
744
|
+
var UUID_SIZE = 16;
|
|
745
|
+
var keys = HashMap.create();
|
|
746
|
+
var rootKey = CreateUniqueKey();
|
|
747
|
+
return (
|
|
748
|
+
/** @class */
|
|
749
|
+
function() {
|
|
750
|
+
function WeakMap2() {
|
|
751
|
+
this._key = CreateUniqueKey();
|
|
752
|
+
}
|
|
753
|
+
__name(WeakMap2, "WeakMap");
|
|
754
|
+
WeakMap2.prototype.has = function(target) {
|
|
755
|
+
var table = GetOrCreateWeakMapTable(
|
|
756
|
+
target,
|
|
757
|
+
/*create*/
|
|
758
|
+
false
|
|
759
|
+
);
|
|
760
|
+
return table !== void 0 ? HashMap.has(table, this._key) : false;
|
|
761
|
+
};
|
|
762
|
+
WeakMap2.prototype.get = function(target) {
|
|
763
|
+
var table = GetOrCreateWeakMapTable(
|
|
764
|
+
target,
|
|
765
|
+
/*create*/
|
|
766
|
+
false
|
|
767
|
+
);
|
|
768
|
+
return table !== void 0 ? HashMap.get(table, this._key) : void 0;
|
|
769
|
+
};
|
|
770
|
+
WeakMap2.prototype.set = function(target, value) {
|
|
771
|
+
var table = GetOrCreateWeakMapTable(
|
|
772
|
+
target,
|
|
773
|
+
/*create*/
|
|
774
|
+
true
|
|
775
|
+
);
|
|
776
|
+
table[this._key] = value;
|
|
777
|
+
return this;
|
|
778
|
+
};
|
|
779
|
+
WeakMap2.prototype.delete = function(target) {
|
|
780
|
+
var table = GetOrCreateWeakMapTable(
|
|
781
|
+
target,
|
|
782
|
+
/*create*/
|
|
783
|
+
false
|
|
784
|
+
);
|
|
785
|
+
return table !== void 0 ? delete table[this._key] : false;
|
|
786
|
+
};
|
|
787
|
+
WeakMap2.prototype.clear = function() {
|
|
788
|
+
this._key = CreateUniqueKey();
|
|
789
|
+
};
|
|
790
|
+
return WeakMap2;
|
|
791
|
+
}()
|
|
792
|
+
);
|
|
793
|
+
function CreateUniqueKey() {
|
|
794
|
+
var key;
|
|
795
|
+
do
|
|
796
|
+
key = "@@WeakMap@@" + CreateUUID();
|
|
797
|
+
while (HashMap.has(keys, key));
|
|
798
|
+
keys[key] = true;
|
|
799
|
+
return key;
|
|
800
|
+
}
|
|
801
|
+
function GetOrCreateWeakMapTable(target, create) {
|
|
802
|
+
if (!hasOwn.call(target, rootKey)) {
|
|
803
|
+
if (!create)
|
|
804
|
+
return void 0;
|
|
805
|
+
Object.defineProperty(target, rootKey, { value: HashMap.create() });
|
|
806
|
+
}
|
|
807
|
+
return target[rootKey];
|
|
808
|
+
}
|
|
809
|
+
function FillRandomBytes(buffer, size) {
|
|
810
|
+
for (var i = 0; i < size; ++i)
|
|
811
|
+
buffer[i] = Math.random() * 255 | 0;
|
|
812
|
+
return buffer;
|
|
813
|
+
}
|
|
814
|
+
function GenRandomBytes(size) {
|
|
815
|
+
if (typeof Uint8Array === "function") {
|
|
816
|
+
if (typeof crypto !== "undefined")
|
|
817
|
+
return crypto.getRandomValues(new Uint8Array(size));
|
|
818
|
+
if (typeof msCrypto !== "undefined")
|
|
819
|
+
return msCrypto.getRandomValues(new Uint8Array(size));
|
|
820
|
+
return FillRandomBytes(new Uint8Array(size), size);
|
|
821
|
+
}
|
|
822
|
+
return FillRandomBytes(new Array(size), size);
|
|
823
|
+
}
|
|
824
|
+
function CreateUUID() {
|
|
825
|
+
var data = GenRandomBytes(UUID_SIZE);
|
|
826
|
+
data[6] = data[6] & 79 | 64;
|
|
827
|
+
data[8] = data[8] & 191 | 128;
|
|
828
|
+
var result = "";
|
|
829
|
+
for (var offset = 0; offset < UUID_SIZE; ++offset) {
|
|
830
|
+
var byte = data[offset];
|
|
831
|
+
if (offset === 4 || offset === 6 || offset === 8)
|
|
832
|
+
result += "-";
|
|
833
|
+
if (byte < 16)
|
|
834
|
+
result += "0";
|
|
835
|
+
result += byte.toString(16).toLowerCase();
|
|
836
|
+
}
|
|
837
|
+
return result;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
__name(CreateWeakMapPolyfill, "CreateWeakMapPolyfill");
|
|
841
|
+
function MakeDictionary(obj) {
|
|
842
|
+
obj.__ = void 0;
|
|
843
|
+
delete obj.__;
|
|
844
|
+
return obj;
|
|
845
|
+
}
|
|
846
|
+
__name(MakeDictionary, "MakeDictionary");
|
|
847
|
+
});
|
|
848
|
+
})(Reflect || (Reflect = {}));
|
|
849
|
+
/*! Bundled license information:
|
|
850
|
+
|
|
851
|
+
reflect-metadata/Reflect.js:
|
|
852
|
+
(*! *****************************************************************************
|
|
853
|
+
Copyright (C) Microsoft. All rights reserved.
|
|
854
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
855
|
+
this file except in compliance with the License. You may obtain a copy of the
|
|
856
|
+
License at http://www.apache.org/licenses/LICENSE-2.0
|
|
857
|
+
|
|
858
|
+
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
859
|
+
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
|
860
|
+
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
|
861
|
+
MERCHANTABLITY OR NON-INFRINGEMENT.
|
|
862
|
+
|
|
863
|
+
See the Apache Version 2.0 License for specific language governing permissions
|
|
864
|
+
and limitations under the License.
|
|
865
|
+
***************************************************************************** *)
|
|
866
|
+
*/
|
|
867
|
+
//# sourceMappingURL=out.js.map
|
|
868
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9yZWZsZWN0LW1ldGFkYXRhL1JlZmxlY3QuanMiXSwibmFtZXMiOlsiUmVmbGVjdCIsImhhc093biIsIk1hcEl0ZXJhdG9yIiwiTWFwIiwiU2V0IiwiV2Vha01hcCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFjQSxJQUFJO0FBQUEsQ0FDSCxTQUFVQSxVQUFTO0FBR2hCLEdBQUMsU0FBVSxTQUFTO0FBQ2hCLFFBQUksT0FBTyxPQUFPLFdBQVcsV0FBVyxTQUNwQyxPQUFPLFNBQVMsV0FBVyxPQUN2QixPQUFPLFNBQVMsV0FBVyxPQUN2QixTQUFTLGNBQWMsRUFBRTtBQUNyQyxRQUFJLFdBQVcsYUFBYUEsUUFBTztBQUNuQyxRQUFJLE9BQU8sS0FBSyxZQUFZLGFBQWE7QUFDckMsV0FBSyxVQUFVQTtBQUFBLElBQ25CLE9BQ0s7QUFDRCxpQkFBVyxhQUFhLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDbEQ7QUFDQSxZQUFRLFFBQVE7QUFDaEIsYUFBUyxhQUFhLFFBQVEsVUFBVTtBQUNwQyxhQUFPLFNBQVUsS0FBSyxPQUFPO0FBQ3pCLFlBQUksT0FBTyxPQUFPLEdBQUcsTUFBTSxZQUFZO0FBQ25DLGlCQUFPLGVBQWUsUUFBUSxLQUFLLEVBQUUsY0FBYyxNQUFNLFVBQVUsTUFBTSxNQUFhLENBQUM7QUFBQSxRQUMzRjtBQUNBLFlBQUk7QUFDQSxtQkFBUyxLQUFLLEtBQUs7QUFBQSxNQUMzQjtBQUFBLElBQ0o7QUFSUztBQUFBLEVBU2IsR0FBRyxTQUFVLFVBQVU7QUFDbkIsUUFBSSxTQUFTLE9BQU8sVUFBVTtBQUU5QixRQUFJLGlCQUFpQixPQUFPLFdBQVc7QUFDdkMsUUFBSSxvQkFBb0Isa0JBQWtCLE9BQU8sT0FBTyxnQkFBZ0IsY0FBYyxPQUFPLGNBQWM7QUFDM0csUUFBSSxpQkFBaUIsa0JBQWtCLE9BQU8sT0FBTyxhQUFhLGNBQWMsT0FBTyxXQUFXO0FBQ2xHLFFBQUksaUJBQWlCLE9BQU8sT0FBTyxXQUFXO0FBQzlD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QUksT0FBTyxhQUFhO0FBQ3BCLG1CQUFPLFNBQVMsZ0JBQWdCLElBQUksV0FBVyxJQUFJLENBQUM7QUFDeEQsaUJBQU8sZ0JBQWdCLElBQUksV0FBVyxJQUFJLEdBQUcsSUFBSTtBQUFBLFFBQ3JEO0FBQ0EsZUFBTyxnQkFBZ0IsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJO0FBQUEsTUFDaEQ7QUFUUztBQVVULGVBQVMsYUFBYTtBQUNsQixZQUFJLE9BQU8sZUFBZSxTQUFTO0FBRW5DLGFBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQU87QUFDM0IsYUFBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksTUFBTztBQUMzQixZQUFJLFNBQVM7QUFDYixpQkFBUyxTQUFTLEdBQUcsU0FBUyxXQUFXLEVBQUUsUUFBUTtBQUMvQyxjQUFJLE9BQU8sS0FBSyxNQUFNO0FBQ3RCLGNBQUksV0FBVyxLQUFLLFdBQVcsS0FBSyxXQUFXO0FBQzNDLHNCQUFVO0FBQ2QsY0FBSSxPQUFPO0FBQ1Asc0JBQVU7QUFDZCxvQkFBVSxLQUFLLFNBQVMsRUFBRSxFQUFFLFlBQVk7QUFBQSxRQUM1QztBQUNBLGVBQU87QUFBQSxNQUNYO0FBZlM7QUFBQSxJQWdCYjtBQTlFUztBQWdGVCxhQUFTLGVBQWUsS0FBSztBQUN6QixVQUFJLEtBQUs7QUFDVCxhQUFPLElBQUk7QUFDWCxhQUFPO0FBQUEsSUFDWDtBQUpTO0FBQUEsRUFLYixDQUFDO0FBQ0wsR0FBRyxZQUFZLFVBQVUsQ0FBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKEMpIE1pY3Jvc29mdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG52YXIgUmVmbGVjdDtcbihmdW5jdGlvbiAoUmVmbGVjdCkge1xuICAgIC8vIE1ldGFkYXRhIFByb3Bvc2FsXG4gICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS9cbiAgICAoZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICAgICAgdmFyIHJvb3QgPSB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgICAgICAgICAgIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMgPT09IFwib2JqZWN0XCIgPyB0aGlzIDpcbiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24oXCJyZXR1cm4gdGhpcztcIikoKTtcbiAgICAgICAgdmFyIGV4cG9ydGVyID0gbWFrZUV4cG9ydGVyKFJlZmxlY3QpO1xuICAgICAgICBpZiAodHlwZW9mIHJvb3QuUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcm9vdC5SZWZsZWN0ID0gUmVmbGVjdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydGVyID0gbWFrZUV4cG9ydGVyKHJvb3QuUmVmbGVjdCwgZXhwb3J0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZhY3RvcnkoZXhwb3J0ZXIpO1xuICAgICAgICBmdW5jdGlvbiBtYWtlRXhwb3J0ZXIodGFyZ2V0LCBwcmV2aW91cykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRba2V5XSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgeyBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91cylcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSkoZnVuY3Rpb24gKGV4cG9ydGVyKSB7XG4gICAgICAgIHZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICAgICAgICAvLyBmZWF0dXJlIHRlc3QgZm9yIFN5bWJvbCBzdXBwb3J0XG4gICAgICAgIHZhciBzdXBwb3J0c1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgdmFyIHRvUHJpbWl0aXZlU3ltYm9sID0gc3VwcG9ydHNTeW1ib2wgJiYgdHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSAhPT0gXCJ1bmRlZmluZWRcIiA/IFN5bWJvbC50b1ByaW1pdGl2ZSA6IFwiQEB0b1ByaW1pdGl2ZVwiO1xuICAgICAgICB2YXIgaXRlcmF0b3JTeW1ib2wgPSBzdXBwb3J0c1N5bWJvbCAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSBcInVuZGVmaW5lZFwiID8gU3ltYm9sLml0ZXJhdG9yIDogXCJAQGl0ZXJhdG9yXCI7XG4gICAgICAgIHZhciBzdXBwb3J0c0NyZWF0ZSA9IHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCI7IC8vIGZlYXR1cmUgdGVzdCBmb3IgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0XG4gICAgICAgIHZhciBzdXBwb3J0c1Byb3RvID0geyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheTsgLy8gZmVhdHVyZSB0ZXN0IGZvciBfX3Byb3RvX18gc3VwcG9ydFxuICAgICAgICB2YXIgZG93bkxldmVsID0gIXN1cHBvcnRzQ3JlYXRlICYmICFzdXBwb3J0c1Byb3RvO1xuICAgICAgICB2YXIgSGFzaE1hcCA9IHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBvYmplY3QgaW4gZGljdGlvbmFyeSBtb2RlIChhLmsuYS4gXCJzbG93XCIgbW9kZSBpbiB2OClcbiAgICAgICAgICAgIGNyZWF0ZTogc3VwcG9ydHNDcmVhdGVcbiAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1ha2VEaWN0aW9uYXJ5KE9iamVjdC5jcmVhdGUobnVsbCkpOyB9XG4gICAgICAgICAgICAgICAgOiBzdXBwb3J0c1Byb3RvXG4gICAgICAgICAgICAgICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gTWFrZURpY3Rpb25hcnkoeyBfX3Byb3RvX186IG51bGwgfSk7IH1cbiAgICAgICAgICAgICAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBNYWtlRGljdGlvbmFyeSh7fSk7IH0sXG4gICAgICAgICAgICBoYXM6IGRvd25MZXZlbFxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24gKG1hcCwga2V5KSB7IHJldHVybiBoYXNPd24uY2FsbChtYXAsIGtleSk7IH1cbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uIChtYXAsIGtleSkgeyByZXR1cm4ga2V5IGluIG1hcDsgfSxcbiAgICAgICAgICAgIGdldDogZG93bkxldmVsXG4gICAgICAgICAgICAgICAgPyBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIGhhc093bi5jYWxsKG1hcCwga2V5KSA/IG1hcFtrZXldIDogdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICAgICAgOiBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIG1hcFtrZXldOyB9LFxuICAgICAgICB9O1xuICAgICAgICAvLyBMb2FkIGdsb2JhbCBvciBzaGltIHZlcnNpb25zIG9mIE1hcCwgU2V0LCBhbmQgV2Vha01hcFxuICAgICAgICB2YXIgZnVuY3Rpb25Qcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRnVuY3Rpb24pO1xuICAgICAgICB2YXIgdXNlUG9seWZpbGwgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudltcIlJFRkxFQ1RfTUVUQURBVEFfVVNFX01BUF9QT0xZRklMTFwiXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgIHZhciBfTWFwID0gIXVzZVBvbHlmaWxsICYmIHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5lbnRyaWVzID09PSBcImZ1bmN0aW9uXCIgPyBNYXAgOiBDcmVhdGVNYXBQb2x5ZmlsbCgpO1xuICAgICAgICB2YXIgX1NldCA9ICF1c2VQb2x5ZmlsbCAmJiB0eXBlb2YgU2V0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUuZW50cmllcyA9PT0gXCJmdW5jdGlvblwiID8gU2V0IDogQ3JlYXRlU2V0UG9seWZpbGwoKTtcbiAgICAgICAgdmFyIF9XZWFrTWFwID0gIXVzZVBvbHlmaWxsICYmIHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogQ3JlYXRlV2Vha01hcFBvbHlmaWxsKCk7XG4gICAgICAgIC8vIFtbTWV0YWRhdGFdXSBpbnRlcm5hbCBzbG90XG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuICAgICAgICB2YXIgTWV0YWRhdGEgPSBuZXcgX1dlYWtNYXAoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFwcGxpZXMgYSBzZXQgb2YgZGVjb3JhdG9ycyB0byBhIHByb3BlcnR5IG9mIGEgdGFyZ2V0IG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIGRlY29yYXRvcnMgQW4gYXJyYXkgb2YgZGVjb3JhdG9ycy5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSB0byBkZWNvcmF0ZS5cbiAgICAgICAgICogQHBhcmFtIGF0dHJpYnV0ZXMgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIHRhcmdldCBrZXkuXG4gICAgICAgICAqIEByZW1hcmtzIERlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW4gcmV2ZXJzZSBvcmRlci5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgRXhhbXBsZSA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9yc0FycmF5LCBFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9yc0FycmF5LCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9yc0FycmF5LCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIixcbiAgICAgICAgICogICAgICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIixcbiAgICAgICAgICogICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKSkpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIsXG4gICAgICAgICAqICAgICAgICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiLFxuICAgICAgICAgKiAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKSkpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUlzQXJyYXkoZGVjb3JhdG9ycykpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KGF0dHJpYnV0ZXMpICYmICFJc1VuZGVmaW5lZChhdHRyaWJ1dGVzKSAmJiAhSXNOdWxsKGF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKElzTnVsbChhdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBEZWNvcmF0ZVByb3BlcnR5KGRlY29yYXRvcnMsIHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFJc0FycmF5KGRlY29yYXRvcnMpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFJc0NvbnN0cnVjdG9yKHRhcmdldCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gRGVjb3JhdGVDb25zdHJ1Y3RvcihkZWNvcmF0b3JzLCB0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiZGVjb3JhdGVcIiwgZGVjb3JhdGUpO1xuICAgICAgICAvLyA0LjEuMiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNyZWZsZWN0Lm1ldGFkYXRhXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGRlZmF1bHQgbWV0YWRhdGEgZGVjb3JhdG9yIGZhY3RvcnkgdGhhdCBjYW4gYmUgdXNlZCBvbiBhIGNsYXNzLCBjbGFzcyBtZW1iZXIsIG9yIHBhcmFtZXRlci5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IFRoZSBrZXkgZm9yIHRoZSBtZXRhZGF0YSBlbnRyeS5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhVmFsdWUgVGhlIHZhbHVlIGZvciB0aGUgbWV0YWRhdGEgZW50cnkuXG4gICAgICAgICAqIEByZXR1cm5zIEEgZGVjb3JhdG9yIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBJZiBgbWV0YWRhdGFLZXlgIGlzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhlIHRhcmdldCBhbmQgdGFyZ2V0IGtleSwgdGhlXG4gICAgICAgICAqIG1ldGFkYXRhVmFsdWUgZm9yIHRoYXQga2V5IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yLCBUeXBlU2NyaXB0IG9ubHkpXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUsIFR5cGVTY3JpcHQgb25seSlcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXG4gICAgICAgICAqICAgICAgICAgcHJvcGVydHk7XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSAmJiAhSXNQcm9wZXJ0eUtleShwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJtZXRhZGF0YVwiLCBtZXRhZGF0YSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmUgYSB1bmlxdWUgbWV0YWRhdGEgZW50cnkgb24gdGhlIHRhcmdldC5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFWYWx1ZSBBIHZhbHVlIHRoYXQgY29udGFpbnMgYXR0YWNoZWQgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdG8gZGVmaW5lIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gZGVjb3JhdG9yIGZhY3RvcnkgYXMgbWV0YWRhdGEtcHJvZHVjaW5nIGFubm90YXRpb24uXG4gICAgICAgICAqICAgICBmdW5jdGlvbiBNeUFubm90YXRpb24ob3B0aW9ucyk6IERlY29yYXRvciB7XG4gICAgICAgICAqICAgICAgICAgcmV0dXJuICh0YXJnZXQsIGtleT8pID0+IFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCB0YXJnZXQsIGtleSk7XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJkZWZpbmVNZXRhZGF0YVwiLCBkZWZpbmVNZXRhZGF0YSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW4gaGFzIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBrZXkgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1ldGFkYXRhIGtleSB3YXMgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0IG9iamVjdCBvciBpdHMgcHJvdG90eXBlIGNoYWluOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc01ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJoYXNNZXRhZGF0YVwiLCBoYXNNZXRhZGF0YSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXJnZXQgb2JqZWN0IGhhcyB0aGUgcHJvdmlkZWQgbWV0YWRhdGEga2V5IGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXRhZGF0YSBrZXkgd2FzIGRlZmluZWQgb24gdGhlIHRhcmdldCBvYmplY3Q7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImhhc093bk1ldGFkYXRhXCIsIGhhc093bk1ldGFkYXRhKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgbWV0YWRhdGEga2V5IG9uIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQHJldHVybnMgVGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgbWV0YWRhdGEga2V5IGlmIGZvdW5kOyBvdGhlcndpc2UsIGB1bmRlZmluZWRgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiZ2V0TWV0YWRhdGFcIiwgZ2V0TWV0YWRhdGEpO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBrZXkgb24gdGhlIHRhcmdldCBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQHJldHVybnMgVGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgbWV0YWRhdGEga2V5IGlmIGZvdW5kOyBvdGhlcndpc2UsIGB1bmRlZmluZWRgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiZ2V0T3duTWV0YWRhdGFcIiwgZ2V0T3duTWV0YWRhdGEpO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbWV0YWRhdGEga2V5cyBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVuaXF1ZSBtZXRhZGF0YSBrZXlzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeU1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImdldE1ldGFkYXRhS2V5c1wiLCBnZXRNZXRhZGF0YUtleXMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgdW5pcXVlIG1ldGFkYXRhIGtleXMgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0IG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pcXVlIG1ldGFkYXRhIGtleXMuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiZ2V0T3duTWV0YWRhdGFLZXlzXCIsIGdldE93bk1ldGFkYXRhS2V5cyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWxldGVzIHRoZSBtZXRhZGF0YSBlbnRyeSBmcm9tIHRoZSB0YXJnZXQgb2JqZWN0IHdpdGggdGhlIHByb3ZpZGVkIGtleS5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1ldGFkYXRhIGVudHJ5IHdhcyBmb3VuZCBhbmQgZGVsZXRlZDsgb3RoZXJ3aXNlLCBmYWxzZS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5kZWxldGVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5kZWxldGVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5kZWxldGVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5kZWxldGVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCBwcm9wZXJ0eUtleSwgLypDcmVhdGUqLyBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghbWV0YWRhdGFNYXAuZGVsZXRlKG1ldGFkYXRhS2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGFNYXAuc2l6ZSA+IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBNZXRhZGF0YS5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHRhcmdldE1ldGFkYXRhLmRlbGV0ZShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0TWV0YWRhdGEuc2l6ZSA+IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBNZXRhZGF0YS5kZWxldGUodGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiZGVsZXRlTWV0YWRhdGFcIiwgZGVsZXRlTWV0YWRhdGEpO1xuICAgICAgICBmdW5jdGlvbiBEZWNvcmF0ZUNvbnN0cnVjdG9yKGRlY29yYXRvcnMsIHRhcmdldCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdG9yID0gZGVjb3JhdG9yc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdGVkID0gZGVjb3JhdG9yKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChkZWNvcmF0ZWQpICYmICFJc051bGwoZGVjb3JhdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzQ29uc3RydWN0b3IoZGVjb3JhdGVkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gZGVjb3JhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRGVjb3JhdGVQcm9wZXJ0eShkZWNvcmF0b3JzLCB0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0b3IgPSBkZWNvcmF0b3JzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0ZWQgPSBkZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChkZWNvcmF0ZWQpICYmICFJc051bGwoZGVjb3JhdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KGRlY29yYXRlZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBkZWNvcmF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBDcmVhdGUpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXRNZXRhZGF0YSA9IE1ldGFkYXRhLmdldChPKTtcbiAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZCh0YXJnZXRNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUNyZWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0YXJnZXRNZXRhZGF0YSA9IG5ldyBfTWFwKCk7XG4gICAgICAgICAgICAgICAgTWV0YWRhdGEuc2V0KE8sIHRhcmdldE1ldGFkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IHRhcmdldE1ldGFkYXRhLmdldChQKTtcbiAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUNyZWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YU1hcCA9IG5ldyBfTWFwKCk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TWV0YWRhdGEuc2V0KFAsIG1ldGFkYXRhTWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YU1hcDtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuMS4xIE9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5aGFzbWV0YWRhdGFcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xuICAgICAgICAgICAgdmFyIGhhc093biA9IE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICAgICAgICAgICAgaWYgKGhhc093bilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pO1xuICAgICAgICAgICAgaWYgKCFJc051bGwocGFyZW50KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuMi4xIE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5aGFzb3dubWV0YWRhdGFcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xuICAgICAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCAvKkNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIFRvQm9vbGVhbihtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuMy4xIE9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5Z2V0bWV0YWRhdGFcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xuICAgICAgICAgICAgdmFyIGhhc093biA9IE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICAgICAgICAgICAgaWYgKGhhc093bilcbiAgICAgICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gT3JkaW5hcnlHZXRQcm90b3R5cGVPZihPKTtcbiAgICAgICAgICAgIGlmICghSXNOdWxsKHBhcmVudCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuMS40LjEgT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUClcbiAgICAgICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnlnZXRvd25tZXRhZGF0YVxuICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgaWYgKElzVW5kZWZpbmVkKG1ldGFkYXRhTWFwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4xLjUuMSBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWRlZmluZW93bm1ldGFkYXRhXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgICAgICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgLypDcmVhdGUqLyB0cnVlKTtcbiAgICAgICAgICAgIG1ldGFkYXRhTWFwLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4xLjYuMSBPcmRpbmFyeU1ldGFkYXRhS2V5cyhPLCBQKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeW1ldGFkYXRha2V5c1xuICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeU1ldGFkYXRhS2V5cyhPLCBQKSB7XG4gICAgICAgICAgICB2YXIgb3duS2V5cyA9IE9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICAgICAgICAgICAgdmFyIHBhcmVudCA9IE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTyk7XG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBvd25LZXlzO1xuICAgICAgICAgICAgdmFyIHBhcmVudEtleXMgPSBPcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICAgICAgICAgICAgaWYgKHBhcmVudEtleXMubGVuZ3RoIDw9IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG93bktleXM7XG4gICAgICAgICAgICBpZiAob3duS2V5cy5sZW5ndGggPD0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50S2V5cztcbiAgICAgICAgICAgIHZhciBzZXQgPSBuZXcgX1NldCgpO1xuICAgICAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgb3duS2V5c18xID0gb3duS2V5czsgX2kgPCBvd25LZXlzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IG93bktleXNfMVtfaV07XG4gICAgICAgICAgICAgICAgdmFyIGhhc0tleSA9IHNldC5oYXMoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0tleSkge1xuICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIF9hID0gMCwgcGFyZW50S2V5c18xID0gcGFyZW50S2V5czsgX2EgPCBwYXJlbnRLZXlzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IHBhcmVudEtleXNfMVtfYV07XG4gICAgICAgICAgICAgICAgdmFyIGhhc0tleSA9IHNldC5oYXMoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0tleSkge1xuICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuMS43LjEgT3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUClcbiAgICAgICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnlvd25tZXRhZGF0YWtleXNcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCkge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgLypDcmVhdGUqLyBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICAgICAgdmFyIGtleXNPYmogPSBtZXRhZGF0YU1hcC5rZXlzKCk7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBHZXRJdGVyYXRvcihrZXlzT2JqKTtcbiAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpO1xuICAgICAgICAgICAgICAgIGlmICghbmV4dCkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLmxlbmd0aCA9IGs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbmV4dFZhbHVlID0gSXRlcmF0b3JWYWx1ZShuZXh0KTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzW2tdID0gbmV4dFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JDbG9zZShpdGVyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyA2IEVDTUFTY3JpcHQgRGF0YSBUeXAwZXMgYW5kIFZhbHVlc1xuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xuICAgICAgICBmdW5jdGlvbiBUeXBlKHgpIHtcbiAgICAgICAgICAgIGlmICh4ID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiAxIC8qIE51bGwgKi87XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOiByZXR1cm4gMCAvKiBVbmRlZmluZWQgKi87XG4gICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjogcmV0dXJuIDIgLyogQm9vbGVhbiAqLztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IHJldHVybiAzIC8qIFN0cmluZyAqLztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6IHJldHVybiA0IC8qIFN5bWJvbCAqLztcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiA1IC8qIE51bWJlciAqLztcbiAgICAgICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHJldHVybiB4ID09PSBudWxsID8gMSAvKiBOdWxsICovIDogNiAvKiBPYmplY3QgKi87XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIDYgLyogT2JqZWN0ICovO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIDYuMS4xIFRoZSBVbmRlZmluZWQgVHlwZVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzLXVuZGVmaW5lZC10eXBlXG4gICAgICAgIGZ1bmN0aW9uIElzVW5kZWZpbmVkKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4ID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNi4xLjIgVGhlIE51bGwgVHlwZVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzLW51bGwtdHlwZVxuICAgICAgICBmdW5jdGlvbiBJc051bGwoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHggPT09IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNi4xLjUgVGhlIFN5bWJvbCBUeXBlXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMtc3ltYm9sLXR5cGVcbiAgICAgICAgZnVuY3Rpb24gSXNTeW1ib2woeCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIDYuMS43IFRoZSBPYmplY3QgVHlwZVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QtdHlwZVxuICAgICAgICBmdW5jdGlvbiBJc09iamVjdCh4KSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgPyB4ICE9PSBudWxsIDogdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjEgVHlwZSBDb252ZXJzaW9uXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXR5cGUtY29udmVyc2lvblxuICAgICAgICAvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbiAgICAgICAgZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQsIFByZWZlcnJlZFR5cGUpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoVHlwZShpbnB1dCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDAgLyogVW5kZWZpbmVkICovOiByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgY2FzZSAxIC8qIE51bGwgKi86IHJldHVybiBpbnB1dDtcbiAgICAgICAgICAgICAgICBjYXNlIDIgLyogQm9vbGVhbiAqLzogcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgIGNhc2UgMyAvKiBTdHJpbmcgKi86IHJldHVybiBpbnB1dDtcbiAgICAgICAgICAgICAgICBjYXNlIDQgLyogU3ltYm9sICovOiByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgY2FzZSA1IC8qIE51bWJlciAqLzogcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGhpbnQgPSBQcmVmZXJyZWRUeXBlID09PSAzIC8qIFN0cmluZyAqLyA/IFwic3RyaW5nXCIgOiBQcmVmZXJyZWRUeXBlID09PSA1IC8qIE51bWJlciAqLyA/IFwibnVtYmVyXCIgOiBcImRlZmF1bHRcIjtcbiAgICAgICAgICAgIHZhciBleG90aWNUb1ByaW0gPSBHZXRNZXRob2QoaW5wdXQsIHRvUHJpbWl0aXZlU3ltYm9sKTtcbiAgICAgICAgICAgIGlmIChleG90aWNUb1ByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG4gICAgICAgICAgICAgICAgaWYgKElzT2JqZWN0KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIGhpbnQgPT09IFwiZGVmYXVsdFwiID8gXCJudW1iZXJcIiA6IGhpbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMS4xLjEgT3JkaW5hcnlUb1ByaW1pdGl2ZShPLCBoaW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuICAgICAgICAgICAgaWYgKGhpbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9TdHJpbmdfMSA9IE8udG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgaWYgKElzQ2FsbGFibGUodG9TdHJpbmdfMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRvU3RyaW5nXzEuY2FsbChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChyZXN1bHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlT2YgPSBPLnZhbHVlT2Y7XG4gICAgICAgICAgICAgICAgaWYgKElzQ2FsbGFibGUodmFsdWVPZikpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlT2YuY2FsbChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChyZXN1bHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZiA9IE8udmFsdWVPZjtcbiAgICAgICAgICAgICAgICBpZiAoSXNDYWxsYWJsZSh2YWx1ZU9mKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsdWVPZi5jYWxsKE8pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdG9TdHJpbmdfMiA9IE8udG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgaWYgKElzQ2FsbGFibGUodG9TdHJpbmdfMikpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRvU3RyaW5nXzIuY2FsbChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChyZXN1bHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4xLjIgVG9Cb29sZWFuKGFyZ3VtZW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvMjAxNi8jc2VjLXRvYm9vbGVhblxuICAgICAgICBmdW5jdGlvbiBUb0Jvb2xlYW4oYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWFyZ3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMS4xMiBUb1N0cmluZyhhcmd1bWVudClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9zdHJpbmdcbiAgICAgICAgZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgYXJndW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4xLjE0IFRvUHJvcGVydHlLZXkoYXJndW1lbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbiAgICAgICAgZnVuY3Rpb24gVG9Qcm9wZXJ0eUtleShhcmd1bWVudCkge1xuICAgICAgICAgICAgdmFyIGtleSA9IFRvUHJpbWl0aXZlKGFyZ3VtZW50LCAzIC8qIFN0cmluZyAqLyk7XG4gICAgICAgICAgICBpZiAoSXNTeW1ib2woa2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIFRvU3RyaW5nKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4yIFRlc3RpbmcgYW5kIENvbXBhcmlzb24gT3BlcmF0aW9uc1xuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10ZXN0aW5nLWFuZC1jb21wYXJpc29uLW9wZXJhdGlvbnNcbiAgICAgICAgLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNhcnJheVxuICAgICAgICBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheVxuICAgICAgICAgICAgICAgID8gQXJyYXkuaXNBcnJheShhcmd1bWVudClcbiAgICAgICAgICAgICAgICA6IGFyZ3VtZW50IGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnQgaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgICAgICAgICAgICA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09IFwiW29iamVjdCBBcnJheV1cIjtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjIuMyBJc0NhbGxhYmxlKGFyZ3VtZW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4gICAgICAgIGZ1bmN0aW9uIElzQ2FsbGFibGUoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBhcyB3ZSBjYW5ub3QgY2hlY2sgZm9yIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjIuNCBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG4gICAgICAgIGZ1bmN0aW9uIElzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBhcyB3ZSBjYW5ub3QgY2hlY2sgZm9yIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMi43IElzUHJvcGVydHlLZXkoYXJndW1lbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzcHJvcGVydHlrZXlcbiAgICAgICAgZnVuY3Rpb24gSXNQcm9wZXJ0eUtleShhcmd1bWVudCkge1xuICAgICAgICAgICAgc3dpdGNoIChUeXBlKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMyAvKiBTdHJpbmcgKi86IHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNCAvKiBTeW1ib2wgKi86IHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyA3LjMgT3BlcmF0aW9ucyBvbiBPYmplY3RzXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9wZXJhdGlvbnMtb24tb2JqZWN0c1xuICAgICAgICAvLyA3LjMuOSBHZXRNZXRob2QoViwgUClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG4gICAgICAgIGZ1bmN0aW9uIEdldE1ldGhvZChWLCBQKSB7XG4gICAgICAgICAgICB2YXIgZnVuYyA9IFZbUF07XG4gICAgICAgICAgICBpZiAoZnVuYyA9PT0gdW5kZWZpbmVkIHx8IGZ1bmMgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghSXNDYWxsYWJsZShmdW5jKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjQgT3BlcmF0aW9ucyBvbiBJdGVyYXRvciBPYmplY3RzXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9wZXJhdGlvbnMtb24taXRlcmF0b3Itb2JqZWN0c1xuICAgICAgICBmdW5jdGlvbiBHZXRJdGVyYXRvcihvYmopIHtcbiAgICAgICAgICAgIHZhciBtZXRob2QgPSBHZXRNZXRob2Qob2JqLCBpdGVyYXRvclN5bWJvbCk7XG4gICAgICAgICAgICBpZiAoIUlzQ2FsbGFibGUobWV0aG9kKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIGZyb20gQ2FsbFxuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbWV0aG9kLmNhbGwob2JqKTtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QoaXRlcmF0b3IpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjQuNCBJdGVyYXRvclZhbHVlKGl0ZXJSZXN1bHQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8yMDE2LyNzZWMtaXRlcmF0b3J2YWx1ZVxuICAgICAgICBmdW5jdGlvbiBJdGVyYXRvclZhbHVlKGl0ZXJSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVyUmVzdWx0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuNC41IEl0ZXJhdG9yU3RlcChpdGVyYXRvcilcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXRlcmF0b3JzdGVwXG4gICAgICAgIGZ1bmN0aW9uIEl0ZXJhdG9yU3RlcChpdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IGZhbHNlIDogcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yY2xvc2VcbiAgICAgICAgZnVuY3Rpb24gSXRlcmF0b3JDbG9zZShpdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIGYgPSBpdGVyYXRvcltcInJldHVyblwiXTtcbiAgICAgICAgICAgIGlmIChmKVxuICAgICAgICAgICAgICAgIGYuY2FsbChpdGVyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gOS4xIE9yZGluYXJ5IE9iamVjdCBJbnRlcm5hbCBNZXRob2RzIGFuZCBJbnRlcm5hbCBTbG90c1xuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHNcbiAgICAgICAgLy8gOS4xLjEuMSBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5Z2V0cHJvdG90eXBlb2ZcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlHZXRQcm90b3R5cGVPZihPKSB7XG4gICAgICAgICAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIE8gIT09IFwiZnVuY3Rpb25cIiB8fCBPID09PSBmdW5jdGlvblByb3RvdHlwZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdG87XG4gICAgICAgICAgICAvLyBUeXBlU2NyaXB0IGRvZXNuJ3Qgc2V0IF9fcHJvdG9fXyBpbiBFUzUsIGFzIGl0J3Mgbm9uLXN0YW5kYXJkLlxuICAgICAgICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci4gQ29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbnNcbiAgICAgICAgICAgIC8vIG11c3QgZWl0aGVyIHNldCBfX3Byb3RvX18gb24gYSBzdWJjbGFzcyBjb25zdHJ1Y3RvciB0byB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvcixcbiAgICAgICAgICAgIC8vIG9yIGVuc3VyZSBlYWNoIGNsYXNzIGhhcyBhIHZhbGlkIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgb24gaXRzIHByb3RvdHlwZSB0aGF0XG4gICAgICAgICAgICAvLyBwb2ludHMgYmFjayB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBGdW5jdGlvbi5bW1Byb3RvdHlwZV1dLCB0aGVuIHRoaXMgaXMgZGVmaW5hdGVseSBpbmhlcml0ZWQuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gaW4gRVM2IG9yIHdoZW4gdXNpbmcgX19wcm90b19fIGluIGEgY29tcGF0aWJsZSBicm93c2VyLlxuICAgICAgICAgICAgaWYgKHByb3RvICE9PSBmdW5jdGlvblByb3RvdHlwZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdG87XG4gICAgICAgICAgICAvLyBJZiB0aGUgc3VwZXIgcHJvdG90eXBlIGlzIE9iamVjdC5wcm90b3R5cGUsIG51bGwsIG9yIHVuZGVmaW5lZCwgdGhlbiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBoZXJpdGFnZS5cbiAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBPLnByb3RvdHlwZTtcbiAgICAgICAgICAgIHZhciBwcm90b3R5cGVQcm90byA9IHByb3RvdHlwZSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICAgICAgICAgIGlmIChwcm90b3R5cGVQcm90byA9PSBudWxsIHx8IHByb3RvdHlwZVByb3RvID09PSBPYmplY3QucHJvdG90eXBlKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm90bztcbiAgICAgICAgICAgIC8vIElmIHRoZSBjb25zdHJ1Y3RvciB3YXMgbm90IGEgZnVuY3Rpb24sIHRoZW4gd2UgY2Fubm90IGRldGVybWluZSB0aGUgaGVyaXRhZ2UuXG4gICAgICAgICAgICB2YXIgY29uc3RydWN0b3IgPSBwcm90b3R5cGVQcm90by5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdG87XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHNvbWUga2luZCBvZiBzZWxmLXJlZmVyZW5jZSwgdGhlbiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBoZXJpdGFnZS5cbiAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gTylcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdG87XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGEgcHJldHR5IGdvb2QgZ3Vlc3MgYXQgdGhlIGhlcml0YWdlLlxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5haXZlIE1hcCBzaGltXG4gICAgICAgIGZ1bmN0aW9uIENyZWF0ZU1hcFBvbHlmaWxsKCkge1xuICAgICAgICAgICAgdmFyIGNhY2hlU2VudGluZWwgPSB7fTtcbiAgICAgICAgICAgIHZhciBhcnJheVNlbnRpbmVsID0gW107XG4gICAgICAgICAgICB2YXIgTWFwSXRlcmF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gTWFwSXRlcmF0b3Ioa2V5cywgdmFsdWVzLCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBrZXlzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZVtcIkBAaXRlcmF0b3JcIl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgICAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgICAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLl9rZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX3NlbGVjdG9yKHRoaXMuX2tleXNbaW5kZXhdLCB0aGlzLl92YWx1ZXNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPj0gdGhpcy5fa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBhcnJheVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IGFycmF5U2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGUudGhyb3cgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gYXJyYXlTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IGFycmF5U2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGUucmV0dXJuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IGFycmF5U2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBhcnJheVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hcEl0ZXJhdG9yO1xuICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gTWFwKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUtleSA9IGNhY2hlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSAtMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hcC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fa2V5cy5sZW5ndGg7IH0sXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdGhpcy5fZmluZChrZXksIC8qaW5zZXJ0Ki8gZmFsc2UpID49IDA7IH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmQoa2V5LCAvKmluc2VydCovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLl92YWx1ZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kKGtleSwgLyppbnNlcnQqLyB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kKGtleSwgLyppbnNlcnQqLyBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX2tleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4ICsgMTsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXNbaSAtIDFdID0gdGhpcy5fa2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaSAtIDFdID0gdGhpcy5fdmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGgtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5sZW5ndGgtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IHRoaXMuX2NhY2hlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBjYWNoZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gY2FjaGVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IC0yO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE1hcEl0ZXJhdG9yKHRoaXMuX2tleXMsIHRoaXMuX3ZhbHVlcywgZ2V0S2V5KTsgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXBJdGVyYXRvcih0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMsIGdldFZhbHVlKTsgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTWFwSXRlcmF0b3IodGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzLCBnZXRFbnRyeSk7IH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZVtcIkBAaXRlcmF0b3JcIl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVudHJpZXMoKTsgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZW50cmllcygpOyB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuX2ZpbmQgPSBmdW5jdGlvbiAoa2V5LCBpbnNlcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlS2V5ICE9PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSB0aGlzLl9rZXlzLmluZGV4T2YodGhpcy5fY2FjaGVLZXkgPSBrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUluZGV4IDwgMCAmJiBpbnNlcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSB0aGlzLl9rZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVJbmRleDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXA7XG4gICAgICAgICAgICB9KCkpO1xuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0S2V5KGtleSwgXykge1xuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRWYWx1ZShfLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEVudHJ5KGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2tleSwgdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG5haXZlIFNldCBzaGltXG4gICAgICAgIGZ1bmN0aW9uIENyZWF0ZVNldFBvbHlmaWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBTZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcCA9IG5ldyBfTWFwKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTZXQucHJvdG90eXBlLCBcInNpemVcIiwge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX21hcC5zaXplOyB9LFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fbWFwLmhhcyh2YWx1ZSk7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRoaXMuX21hcC5zZXQodmFsdWUsIHZhbHVlKSwgdGhpczsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZSh2YWx1ZSk7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsgdGhpcy5fbWFwLmNsZWFyKCk7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbWFwLmtleXMoKTsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX21hcC52YWx1ZXMoKTsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAuZW50cmllcygpOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGVbXCJAQGl0ZXJhdG9yXCJdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5rZXlzKCk7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmtleXMoKTsgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gU2V0O1xuICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuYWl2ZSBXZWFrTWFwIHNoaW1cbiAgICAgICAgZnVuY3Rpb24gQ3JlYXRlV2Vha01hcFBvbHlmaWxsKCkge1xuICAgICAgICAgICAgdmFyIFVVSURfU0laRSA9IDE2O1xuICAgICAgICAgICAgdmFyIGtleXMgPSBIYXNoTWFwLmNyZWF0ZSgpO1xuICAgICAgICAgICAgdmFyIHJvb3RLZXkgPSBDcmVhdGVVbmlxdWVLZXkoKTtcbiAgICAgICAgICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5ID0gQ3JlYXRlVW5pcXVlS2V5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCAvKmNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBIYXNoTWFwLmhhcyh0YWJsZSwgdGhpcy5fa2V5KSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGUgPSBHZXRPckNyZWF0ZVdlYWtNYXBUYWJsZSh0YXJnZXQsIC8qY3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFibGUgIT09IHVuZGVmaW5lZCA/IEhhc2hNYXAuZ2V0KHRhYmxlLCB0aGlzLl9rZXkpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCAvKmNyZWF0ZSovIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0YWJsZVt0aGlzLl9rZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGUgPSBHZXRPckNyZWF0ZVdlYWtNYXBUYWJsZSh0YXJnZXQsIC8qY3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFibGUgIT09IHVuZGVmaW5lZCA/IGRlbGV0ZSB0YWJsZVt0aGlzLl9rZXldIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogbm90IGEgcmVhbCBjbGVhciwganVzdCBtYWtlcyB0aGUgcHJldmlvdXMgZGF0YSB1bnJlYWNoYWJsZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXkgPSBDcmVhdGVVbmlxdWVLZXkoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBXZWFrTWFwO1xuICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIENyZWF0ZVVuaXF1ZUtleSgpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5O1xuICAgICAgICAgICAgICAgIGRvXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IFwiQEBXZWFrTWFwQEBcIiArIENyZWF0ZVVVSUQoKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoSGFzaE1hcC5oYXMoa2V5cywga2V5KSk7XG4gICAgICAgICAgICAgICAga2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCBjcmVhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc093bi5jYWxsKHRhcmdldCwgcm9vdEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjcmVhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCByb290S2V5LCB7IHZhbHVlOiBIYXNoTWFwLmNyZWF0ZSgpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Jvb3RLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gRmlsbFJhbmRvbUJ5dGVzKGJ1ZmZlciwgc2l6ZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKVxuICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSBNYXRoLnJhbmRvbSgpICogMHhmZiB8IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIEdlblJhbmRvbUJ5dGVzKHNpemUpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtc0NyeXB0byAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoc2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsbFJhbmRvbUJ5dGVzKG5ldyBVaW50OEFycmF5KHNpemUpLCBzaXplKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbGxSYW5kb21CeXRlcyhuZXcgQXJyYXkoc2l6ZSksIHNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gQ3JlYXRlVVVJRCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEdlblJhbmRvbUJ5dGVzKFVVSURfU0laRSk7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyByYW5kb20gLSBSRkMgNDEyMiDCpyA0LjRcbiAgICAgICAgICAgICAgICBkYXRhWzZdID0gZGF0YVs2XSAmIDB4NGYgfCAweDQwO1xuICAgICAgICAgICAgICAgIGRhdGFbOF0gPSBkYXRhWzhdICYgMHhiZiB8IDB4ODA7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgVVVJRF9TSVpFOyArK29mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZSA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gNCB8fCBvZmZzZXQgPT09IDYgfHwgb2Zmc2V0ID09PSA4KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiLVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA8IDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYnl0ZS50b1N0cmluZygxNikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB1c2VzIGEgaGV1cmlzdGljIHVzZWQgYnkgdjggYW5kIGNoYWtyYSB0byBmb3JjZSBhbiBvYmplY3QgaW50byBkaWN0aW9uYXJ5IG1vZGUuXG4gICAgICAgIGZ1bmN0aW9uIE1ha2VEaWN0aW9uYXJ5KG9iaikge1xuICAgICAgICAgICAgb2JqLl9fID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fXztcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKFJlZmxlY3QgfHwgKFJlZmxlY3QgPSB7fSkpO1xuIl19
|