raindancers-cloudfront 0.0.32 → 0.0.33
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/lib/cloudfront/lambda-bundled/cognito-auth/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_aws_iot_metrics.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_test.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/auth.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/cbor.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/checksums.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/common.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/crypto.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/http.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/io.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/logging.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt5.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt_request_response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/s3.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/websocket.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/http.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/rpc.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/bin/__pycache__/jp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/args.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/auth.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/awsrequest.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compat.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compress.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/config.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configloader.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configprovider.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/context.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/credentials.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/discovery.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint_provider.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/errorfactory.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/eventstream.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/handlers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/history.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/hooks.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpchecksum.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpsession.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/loaders.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/model.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/monitoring.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/paginate.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/parsers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/plugin.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/regions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/retryhandler.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/serialize.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/session.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/signers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/stub.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/tokens.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/translate.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/useragent.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/validate.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/waiter.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/auth.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/docstring.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/example.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/method.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/paginator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/params.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/service.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/shape.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/sharedexample.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/translator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/waiter.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/restdoc.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/style.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/adaptive.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/bucket.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/quota.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/special.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/standard.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/throttling.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_common.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_version.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/easter.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/relativedelta.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/rrule.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/tzwin.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/_parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/isoparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_common.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_factories.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/tz.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/win.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/ast.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/lexer.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_base_connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_request_methods.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
- package/lib/cloudfront/patterns/cognito-customui-auth.d.ts +10 -3
- package/lib/cloudfront/patterns/cognito-customui-auth.js +12 -3
- package/package.json +1 -1
|
@@ -180,7 +180,10 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
180
180
|
version.applyRemovalPolicy(core.RemovalPolicy.RETAIN_ON_UPDATE_OR_DELETE);
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
-
|
|
183
|
+
// Endpoint behaviours use authEndpointOrigin when supplied (a non-VPC origin,
|
|
184
|
+
// required when the default behaviour's origin is a VPC origin), else the
|
|
185
|
+
// default behaviour's origin. Attach mode guarantees authEndpointOrigin is set.
|
|
186
|
+
const endpointOrigin = props.authEndpointOrigin ?? props.defaultBehavior.origin;
|
|
184
187
|
// Auth endpoints are POST-driven; CloudFront otherwise defaults to GET/HEAD
|
|
185
188
|
// and rejects the POST these endpoints require. Allow all methods by default.
|
|
186
189
|
const authEndpointAllowedMethods = props.authEndpointAllowedMethods ?? aws_cdk_lib_1.aws_cloudfront.AllowedMethods.ALLOW_ALL;
|
|
@@ -191,7 +194,13 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
191
194
|
cachePolicy: aws_cdk_lib_1.aws_cloudfront.CachePolicy.CACHING_DISABLED,
|
|
192
195
|
edgeLambdas: [{
|
|
193
196
|
functionVersion: fn.currentVersion,
|
|
194
|
-
|
|
197
|
+
// Origin-request, not viewer-request: the session-issuance function bundles
|
|
198
|
+
// PyJWT and exceeds the 1 MB viewer-request code limit, so it must run at
|
|
199
|
+
// origin-request (50 MB limit). Origin-request Lambda@Edge is not permitted
|
|
200
|
+
// on a VPC-origin behaviour, which is why these endpoints run on
|
|
201
|
+
// authEndpointOrigin (a non-VPC origin) rather than the default behaviour's
|
|
202
|
+
// origin — see the authEndpointOrigin prop doc.
|
|
203
|
+
eventType: aws_cdk_lib_1.aws_cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST,
|
|
195
204
|
includeBody: includeBody,
|
|
196
205
|
}],
|
|
197
206
|
});
|
|
@@ -399,4 +408,4 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
399
408
|
}
|
|
400
409
|
}
|
|
401
410
|
exports.CognitoCustomUiAuth = CognitoCustomUiAuth;
|
|
402
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1jdXN0b211aS1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nsb3VkZnJvbnQvcGF0dGVybnMvY29nbml0by1jdXN0b211aS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FPcUI7QUFDckIsdURBQXlDO0FBQ3pDLDJEQUFvRztBQUNwRyxpRkFBNkU7QUFtSDdFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsbUJBQW1ELFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFZMUYsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFzQztRQUN6RixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDO1FBQ3BELElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcscUJBQUcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sU0FBUyxHQUFHLHFCQUFHLENBQUMs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SSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RixDQUFDOzRCQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDeEUsT0FBTyxJQUFJLENBQUM7d0JBQ2QsQ0FBQztxQkFDRjtvQkFDRCxLQUFLLEVBQUUsd0JBQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWE7b0JBQy9DLE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsSUFBSTt3QkFDWiw0SUFBNEk7cUJBQzdJO29CQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztpQkFDakY7YUFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBcGFELGtEQW9hQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIgYXMgYWNtLFxuICBhd3NfY2xvdWRmcm9udCBhcyBjbG91ZGZyb250LFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX3NzbSBhcyBzc20sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBFeHRlbnNpb24sIEV4dGVuc2lvbkNvbmZpZywgQWRkQmVoYXZpb3JPcHRpb25zLCBSb2xlTWF0Y2hNb2RlIH0gZnJvbSAnLi9zZWN1cmVkQ2xvdWRGcm9udCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNvbXBvc2VyIH0gZnJvbSAnLi4vY2xvdWRmcm9udC1mdW5jdGlvbnMvZnVuY3Rpb24tY29tcG9zZXInO1xuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgQ29nbml0b0N1c3RvbVVpQXV0aH0uXG4gKlxuICogQ29uZmlndXJlcyBjdXN0b21lciBhdXRoZW50aWNhdGlvbiBmb3IgYSBzdG9yZWZyb250IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gKiB1c2luZyBBV1MgQ29nbml0byB3aXRoIGEgZmlyc3QtcGFydHkgKGN1c3RvbSkgbG9naW4gVUkuIFVuYXV0aGVudGljYXRlZFxuICogcmVxdWVzdHMgdG8gcHJvdGVjdGVkIHBhdGhzIGFyZSByZWRpcmVjdGVkIHRvIHtAbGluayB1bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGh9XG4gKiBvbiB0aGUgYnJhbmQncyBvd24gZG9tYWluIOKAlCBuZXZlciB0byBhIENvZ25pdG8gaG9zdGVkIFVJLiBUaGUgbG9naW4gcGFnZVxuICogcGVyZm9ybXMgU1JQIGNsaWVudC1zaWRlIGFuZCBQT1NUcyB0aGUgcmVzdWx0aW5nIHRva2VucyB0byB0aGUgc2Vzc2lvbi1pc3N1YW5jZVxuICogZW5kcG9pbnQ7IENvZ25pdG8gdG9rZW5zIGFyZSBuZXZlciBzdG9yZWQgaW4gdGhlIGJyb3dzZXIuXG4gKlxuICogVGhlIGJhY2tlbmQgKHVzZXIgcG9vbCwgSE1BQyBrZXksIGF1dGggdGFibGUsIEtWUywgY29uZmlnIHNlY3JldCkgaXMgcHJvdmlkZWRcbiAqIGJ5IHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfSBhbmQgcmVmZXJlbmNlZCBoZXJlIHZpYSBTU00gcGFyYW1ldGVyc1xuICogd3JpdHRlbiB1bmRlciB7QGxpbmsgYXV0aFNzbVBhcmFtUHJlZml4fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQ3VzdG9tVWlBdXRoUHJvcHM8VFJvbGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIENSRUFURSBNT0RFOiBkZWZhdWx0IGNhY2hlIGJlaGF2aW91ciBmb3IgYSBkaXN0cmlidXRpb24gdGhpcyBjb25zdHJ1Y3Qgd2lsbFxuICAgKiBjcmVhdGUuIFByb3ZpZGUgd2l0aCB7QGxpbmsgY2VydGlmaWNhdGV9LiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgKiB7QGxpbmsgZGlzdHJpYnV0aW9ufS4gWW91IE1BWSBzZXQgYGZ1bmN0aW9uQXNzb2NpYXRpb25zYCBoZXJlIChlLmcuIGFcbiAgICogZ2VvLXJvdXRpbmcgdmlld2VyLXJlcXVlc3QgZnVuY3Rpb24pIOKAlCBpdCBpcyBtZXJnZWQgd2l0aCB0aGUgYXV0aC1jaGVja1xuICAgKiBmdW5jdGlvbjsgQ2xvdWRGcm9udCdzIG9uZS1mdW5jdGlvbi1wZXItZXZlbnQtdHlwZSBydWxlIGlzIGVuZm9yY2VkIHdpdGggYVxuICAgKiBjbGVhciBlcnJvciByYXRoZXIgdGhhbiBhbiBMMSBvdmVycmlkZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCZWhhdmlvcj86IGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zO1xuICAvKiogRG9tYWluIG5hbWVzIGZvciB0aGUgYXV0aCBjb25maWcgKGFsbG93ZWRfZG9tYWlucyk7IGZpcnN0IGlzIGNhbm9uaWNhbC4gUmVxdWlyZWQgaW4gYm90aCBtb2Rlcy4gKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc2hhcmVkIHNlc3Npb24gY29uZmlnIHNlY3JldCB0aGUgZWRnZSBMYW1iZGFzIGZldGNoIGJ5IG5hbWUuXG4gICAqIE1VU1QgbWF0Y2ggdGhlIG5hbWUgdGhlIHtAbGluayBDb2duaXRvU2Vzc2lvbkJhY2tlbmR9IGNyZWF0ZWQgaXQgdW5kZXIuXG4gICAqIE92ZXJyaWRlIHRvIGRlY291cGxlIGZyb20gdGhlIGNhbm9uaWNhbCBkb21haW4uXG4gICAqIEBkZWZhdWx0IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7ZG9tYWluTmFtZXNbMF19YFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU2VjcmV0TmFtZT86IHN0cmluZztcbiAgLyoqIENSRUFURSBNT0RFOiBBQ00gY2VydGlmaWNhdGUgKHVzLWVhc3QtMSkgY292ZXJpbmcge0BsaW5rIGRvbWFpbk5hbWVzfS4gKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBhY20uSUNlcnRpZmljYXRlO1xuICAvKiogQ1JFQVRFIE1PREU6IFdBRiB3ZWIgQUNMIEFSTiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY3JlYXRlZCBkaXN0cmlidXRpb24uICovXG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xuICAvKipcbiAgICogQVRUQUNIIE1PREU6IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiB0byBhZGQgdGhlIGF1dGggZW5kcG9pbnQgKyBwcm90ZWN0ZWRcbiAgICogYmVoYXZpb3VycyB0bywgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXG4gICAqIHtAbGluayBkZWZhdWx0QmVoYXZpb3J9L3tAbGluayBjZXJ0aWZpY2F0ZX0uIENsb3VkRnJvbnQgYWxsb3dzIG9ubHkgb25lXG4gICAqIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIsIHNvIHRoZSBhdXRoLWNoZWNrIGlzIGFkZGVkIHRvIHByb3RlY3RlZFxuICAgKiBQQVRIIGJlaGF2aW91cnMgKHZpYSB7QGxpbmsgcHJvdGVjdH0pIOKAlCBpdCBpcyBOT1QgZm9yY2VkIG9udG8gdGhlIGV4aXN0aW5nXG4gICAqIGRlZmF1bHQgYmVoYXZpb3VyLiBVc2Uge0BsaW5rIGF1dGhGdW5jdGlvbn0gdG8gY29tcG9zZSBpdCB0aGVyZSB5b3Vyc2VsZi5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogQVRUQUNIIE1PREU6IG9yaWdpbiBmb3IgdGhlIGF1dGggZW5kcG9pbnQgYmVoYXZpb3VycyAoaXNzdWFuY2UvcmVmcmVzaC9sb2dvdXQpLlxuICAgKiBUaGUgZW5kcG9pbnRzIGFyZSBnZW5lcmF0ZWQgYnkgTGFtYmRhQEVkZ2UsIGJ1dCBhIENsb3VkRnJvbnQgYmVoYXZpb3VyIHN0aWxsXG4gICAqIHJlcXVpcmVzIGFuIG9yaWdpbi4gUmVxdWlyZWQgd2hlbiB7QGxpbmsgZGlzdHJpYnV0aW9ufSBpcyBzZXQuXG4gICAqL1xuICByZWFkb25seSBhdXRoRW5kcG9pbnRPcmlnaW4/OiBjbG91ZGZyb250LklPcmlnaW47XG4gIC8qKlxuICAgKiBTU00gcGFyYW1ldGVyIHByZWZpeCB1bmRlciB3aGljaCB7QGxpbmsgQ29nbml0b0F1dGhJbmZyYXN0cnVjdHVyZX0gcHVibGlzaGVkXG4gICAqIGBjb25maWdTZWNyZXRBcm5gLCBga21zS2V5QXJuYCwgYGF1dGhUYWJsZUFybmAsIGBrdnNBcm5gLCBgY29nbml0b0RvbWFpbmAsXG4gICAqIGBjbGllbnRJZGAgYW5kIGB1c2VyUG9vbElkYC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhTc21QYXJhbVByZWZpeDogc3RyaW5nO1xuICAvKiogUmVnaW9uIHRoZSBhdXRoIGJhY2tlbmQgKGNvbmZpZyBzZWNyZXQsIGF1dGggdGFibGUpIGxpdmVzIGluLiAqL1xuICByZWFkb25seSBhdXRoUmVnaW9uOiBzdHJpbmc7XG4gIC8qKiBGaXJzdC1wYXJ0eSBwYXRoIHVuYXV0aGVudGljYXRlZCB1c2VycyBhcmUgcmVkaXJlY3RlZCB0by4gQGRlZmF1bHQgJy9sb2dpbicgKi9cbiAgcmVhZG9ubHkgdW5hdXRoZW50aWNhdGVkUmVkaXJlY3RQYXRoPzogc3RyaW5nO1xuICAvKiogRXh0ZW5zaW9ucyBhcHBsaWVkIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gQGRlZmF1bHQgW10gKHB1YmxpYykgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVuc2lvbnM/OiBFeHRlbnNpb25bXTtcbiAgLyoqIFJvbGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLiAqL1xuICByZWFkb25seSBkZWZhdWx0RXh0ZW5zaW9uQ29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPjtcbiAgLyoqIEluamVjdCB2YWxpZGF0ZWQgaWRlbnRpdHkgY2xhaW1zIGFzIG9yaWdpbiBoZWFkZXJzLiBAZGVmYXVsdCB0cnVlICovXG4gIHJlYWRvbmx5IGVuYWJsZUhlYWRlckluamVjdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNYXAgb2Ygb3JpZ2luIGhlYWRlciBuYW1lIHRvIHNlc3Npb24tSldUIGNsYWltIGtleS5cbiAgICogQGRlZmF1bHQgeyAneC1jdXN0b21lci1pZCc6ICdjdXN0b21lcl9pZCcsICd4LWN1c3RvbWVyLWVtYWlsJzogJ2VtYWlsJyB9XG4gICAqL1xuICByZWFkb25seSBoZWFkZXJJbmplY3Rpb25DbGFpbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUGF0aCBvZiB0aGUgc2Vzc2lvbi1pc3N1YW5jZSBlbmRwb2ludCAoUE9TVCkuIEBkZWZhdWx0ICcvYXV0aC9zZXNzaW9uJyAqL1xuICByZWFkb25seSBzZXNzaW9uSXNzdWFuY2VQYXRoPzogc3RyaW5nO1xuICAvKiogTW91bnQgdGhlIHNpbGVudC1yZWZyZXNoIGVuZHBvaW50IGF0ICcvb2F1dGgyL3JlZnJlc2gnLiBAZGVmYXVsdCB0cnVlICovXG4gIHJlYWRvbmx5IGVuYWJsZVJlZnJlc2hFbmRwb2ludD86IGJvb2xlYW47XG4gIC8qKiBNb3VudCB0aGUgbG9nb3V0IGVuZHBvaW50IGF0ICcvb2F1dGgyL2xvZ291dCcgKFBPU1QpLiBAZGVmYXVsdCB0cnVlICovXG4gIHJlYWRvbmx5IGVuYWJsZUxvZ291dEVuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqIFVSTCBvZiB0aGUgaWRlbnRpdHktbGlua2luZyBob29rIHRoZSBpc3N1YW5jZSBlbmRwb2ludCBjYWxscyB0byByZXNvbHZlIGN1c3RvbWVyX2lkLiAqL1xuICByZWFkb25seSBpZGVudGl0eUxpbmtpbmdIb29rVXJsOiBzdHJpbmc7XG4gIC8qKiBTZWNyZXRzIE1hbmFnZXIgQVJOIG9mIHRoZSBzaGFyZWQgc2VjcmV0IHVzZWQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBob29rLiAqL1xuICByZWFkb25seSBpZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuPzogc3RyaW5nO1xuICAvKiogU2Vzc2lvbiBKV1QgbGlmZXRpbWUsIHNlY29uZHMuIEBkZWZhdWx0IDM2MDAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblR0bFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKiBTdG9yZWQgcmVmcmVzaC10b2tlbiBsaWZldGltZSwgZGF5cy4gQGRlZmF1bHQgMzAgKi9cbiAgcmVhZG9ubHkgcmVmcmVzaFR0bERheXM/OiBudW1iZXI7XG4gIC8qKiBQYXRoIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ291dC4gQGRlZmF1bHQgJy8nICovXG4gIHJlYWRvbmx5IHBvc3RMb2dvdXRSZWRpcmVjdFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBBZGQgU1BBIGN1c3RvbSBlcnJvciByZXNwb25zZXMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUVycm9yUmVzcG9uc2VzPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIHBhZ2UgcGF0aCB3aGVuIHtAbGluayBlbmFibGVFcnJvclJlc3BvbnNlc30gaXMgc2V0LiBAZGVmYXVsdCAnL2Vycm9yLmh0bWwnICovXG4gIHJlYWRvbmx5IGVycm9yUmVzcG9uc2VQYWdlUGF0aD86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgcm9vdCBvYmplY3QuIEBkZWZhdWx0ICdpbmRleC5odG1sJyAqL1xuICByZWFkb25seSBkZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZztcbiAgLyoqXG4gICAqIENSRUFURSBNT0RFOiBtaW5pbXVtIFRMUyBzZWN1cml0eSBwb2xpY3kgZm9yIHRoZSBjcmVhdGVkIGRpc3RyaWJ1dGlvbidzXG4gICAqIHZpZXdlciBjb25uZWN0aW9ucy4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQtZ2VuZXJhdGlvbiBwb2xpY3k7IG92ZXJyaWRlIG9ubHlcbiAgICogdG8gcmVsYXggaXQgKG5vdCByZWNvbW1lbmRlZCkuIElnbm9yZWQgaW4gQVRUQUNIIE1PREUg4oCUIHRoZSBwYXNzZWQtaW5cbiAgICogZGlzdHJpYnV0aW9uIGFscmVhZHkgZml4ZXMgaXRzIG93biBwb2xpY3kuXG4gICAqIEBkZWZhdWx0IGNsb3VkZnJvbnQuU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDI1XG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uPzogY2xvdWRmcm9udC5TZWN1cml0eVBvbGljeVByb3RvY29sO1xuICAvKipcbiAgICogQWxsb3dlZCB2aWV3ZXIgSFRUUCBtZXRob2RzIGZvciB0aGUgYXV0aCBlbmRwb2ludCBiZWhhdmlvdXJzIChzZXNzaW9uXG4gICAqIGlzc3VhbmNlLCByZWZyZXNoLCBsb2dvdXQpLiBUaGVzZSBlbmRwb2ludHMgYXJlIFBPU1QtZHJpdmVuLCBzbyB0aGUgZGVmYXVsdFxuICAgKiBwZXJtaXRzIGFsbCBtZXRob2RzOyBDbG91ZEZyb250J3MgR0VUL0hFQUQgZGVmYXVsdCB3b3VsZCBvdGhlcndpc2UgcmVqZWN0IHRoZVxuICAgKiBQT1NUIHRoZXkgcmVxdWlyZS4gT3ZlcnJpZGUgdG8gbmFycm93IGl0IChtdXN0IHN0aWxsIGluY2x1ZGUgUE9TVCkuXG4gICAqIEBkZWZhdWx0IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMXG4gICAqL1xuICByZWFkb25seSBhdXRoRW5kcG9pbnRBbGxvd2VkTWV0aG9kcz86IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHM7XG59XG5cbi8qKlxuICogQ3VzdG9tZXIgYXV0aGVudGljYXRpb24gZm9yIGEgc3RvcmVmcm9udCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB1c2luZyBDb2duaXRvXG4gKiB3aXRoIGEgY3VzdG9tLCBicmFuZC1kb21haW4gbG9naW4gVUkuXG4gKlxuICogT1dOUyAoaW4gdGhpcyBsaWJyYXJ5KTogdGhlIGVkZ2Ugc2Vzc2lvbi12YWxpZGF0aW9uIGZ1bmN0aW9uIChyZXVzZWQgc2hhcmVkXG4gKiBtb2R1bGUsIHJlZGlyZWN0aW5nIHRvIGEgZmlyc3QtcGFydHkgL2xvZ2luKSwgdGhlIHNlc3Npb24taXNzdWFuY2UgLyByZWZyZXNoIC9cbiAqIGxvZ291dCBMYW1iZGFARWRnZSBmdW5jdGlvbnMsIGFuZCB0aGVpciBJQU0gd2lyaW5nLiBDT05TVU1FUzogdGhlIENvZ25pdG9cbiAqIGJhY2tlbmQgZnJvbSB7QGxpbmsgQ29nbml0b0F1dGhJbmZyYXN0cnVjdHVyZX0uIERvZXMgTk9UIHByb3Zpc2lvbiB0aGUgdXNlclxuICogcG9vbCDigJQgdGhhdCBpcyB0aGUgYmFja2VuZCBjb25zdHJ1Y3QncyBqb2IuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2duaXRvQ3VzdG9tVWlBdXRoPFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogY2xvdWRmcm9udC5EaXN0cmlidXRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb3NlcjogRnVuY3Rpb25Db21wb3NlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb3NlZEZ1bmN0aW9uczogTWFwPHN0cmluZywgY2xvdWRmcm9udC5GdW5jdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkga3ZzOiBjbG91ZGZyb250LklLZXlWYWx1ZVN0b3JlO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2luUmVkaXJlY3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlSGVhZGVySW5qZWN0aW9uOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckluamVjdGlvbkNsYWltczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVSZWZyZXNoOiBib29sZWFuO1xuICBwcml2YXRlIGxhc3RDcmVhdGVkRnVuY3Rpb246IGNsb3VkZnJvbnQuRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29nbml0b0N1c3RvbVVpQXV0aFByb3BzPFRSb2xlPikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBhdHRhY2hNb2RlID0gcHJvcHMuZGlzdHJpYnV0aW9uICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKGF0dGFjaE1vZGUgJiYgIXByb3BzLmF1dGhFbmRwb2ludE9yaWdpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdXRoRW5kcG9pbnRPcmlnaW4gaXMgcmVxdWlyZWQgd2hlbiBhdHRhY2hpbmcgdG8gYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uJyk7XG4gICAgfVxuICAgIGlmICghYXR0YWNoTW9kZSAmJiAoIXByb3BzLmRlZmF1bHRCZWhhdmlvciB8fCAhcHJvcHMuY2VydGlmaWNhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlZmF1bHRCZWhhdmlvciBhbmQgY2VydGlmaWNhdGUgYXJlIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcgYSBkaXN0cmlidXRpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBwID0gcHJvcHMuYXV0aFNzbVBhcmFtUHJlZml4O1xuICAgIGNvbnN0IGNvbmZpZ1NlY3JldEFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0vY29uZmlnU2VjcmV0QXJuYCk7XG4gICAgY29uc3Qga21zS2V5QXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9rbXNLZXlBcm5gKTtcbiAgICBjb25zdCBhdXRoVGFibGVBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2F1dGhUYWJsZUFybmApO1xuICAgIGNvbnN0IGt2c0FybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0va3ZzQXJuYCk7XG5cbiAgICB0aGlzLmt2cyA9IGNsb3VkZnJvbnQuS2V5VmFsdWVTdG9yZS5mcm9tS2V5VmFsdWVTdG9yZUFybih0aGlzLCAnS1ZTJywga3ZzQXJuKTtcbiAgICB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoID0gcHJvcHMudW5hdXRoZW50aWNhdGVkUmVkaXJlY3RQYXRoID8/ICcvbG9naW4nO1xuICAgIHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uID0gcHJvcHMuZW5hYmxlSGVhZGVySW5qZWN0aW9uID8/IHRydWU7XG4gICAgdGhpcy5oZWFkZXJJbmplY3Rpb25DbGFpbXMgPSBwcm9wcy5oZWFkZXJJbmplY3Rpb25DbGFpbXMgPz8ge1xuICAgICAgJ3gtY3VzdG9tZXItaWQnOiAnY3VzdG9tZXJfaWQnLFxuICAgICAgJ3gtY3VzdG9tZXItZW1haWwnOiAnZW1haWwnLFxuICAgIH07XG4gICAgdGhpcy5lbmFibGVSZWZyZXNoID0gcHJvcHMuZW5hYmxlUmVmcmVzaEVuZHBvaW50ID8/IHRydWU7XG4gICAgdGhpcy5jb21wb3NlciA9IG5ldyBGdW5jdGlvbkNvbXBvc2VyKCk7XG4gICAgdGhpcy5jb21wb3NlZEZ1bmN0aW9ucyA9IG5ldyBNYXAoKTtcblxuICAgIGNvbnN0IGNhbm9uaWNhbERvbWFpbiA9IHByb3BzLmRvbWFpbk5hbWVzWzBdO1xuICAgIGNvbnN0IGJhc2VTZWNyZXROYW1lID0gcHJvcHMuY29uZmlnU2VjcmV0TmFtZSA/PyBgY2xvdWRmcm9udC1hdXRoLWNvbmZpZy0ke2Nhbm9uaWNhbERvbWFpbn1gO1xuICAgIGNvbnN0IHNlc3Npb25Jc3N1YW5jZVBhdGggPSBwcm9wcy5zZXNzaW9uSXNzdWFuY2VQYXRoID8/ICcvYXV0aC9zZXNzaW9uJztcblxuICAgIC8vIEV4dHJhIGNvbmZpZyBzZWNyZXQgZm9yIHZhbHVlcyB0aGF0IGFyZSBDREsgdG9rZW5zIGF0IHN5bnRoIHRpbWUgKGFuZCBzb1xuICAgIC8vIGNhbm5vdCBiZSBiYWtlZCBpbnRvIGNvbmZpZ19nZW5lcmF0ZWQucHkpIOKAlCBMYW1iZGFARWRnZSBmb3JiaWRzIGVudiB2YXJzLlxuICAgIGNvbnN0IGV4dHJhQ29uZmlnU2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCAnQ3VzdG9tVWlDb25maWdTZWNyZXQnLCB7XG4gICAgICBzZWNyZXROYW1lOiBgY2xvdWRmcm9udC1jdXN0b211aS1jb25maWctJHtjYW5vbmljYWxEb21haW59YCxcbiAgICAgIHNlY3JldE9iamVjdFZhbHVlOiB7XG4gICAgICAgIGt2c19hcm46IGNvcmUuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KGt2c0FybiksXG4gICAgICAgIHBvc3RfYXV0aF9ob29rX3VybDogY29yZS5TZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQocHJvcHMuaWRlbnRpdHlMaW5raW5nSG9va1VybCksXG4gICAgICAgIHBvc3RfYXV0aF9ob29rX3NlY3JldF9hcm46IGNvcmUuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm4gPz8gJycpLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgQ3VzdG9tLVVJIGF1dGggY29uZmlnIG92ZXJyaWRlcyBmb3IgJHtjYW5vbmljYWxEb21haW59YCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YXRpY092ZXJyaWRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIGxvZ2luX3JlZGlyZWN0X3BhdGg6IHRoaXMubG9naW5SZWRpcmVjdFBhdGgsXG4gICAgICBhbGxvd2VkX2RvbWFpbnM6IEpTT04uc3RyaW5naWZ5KHByb3BzLmRvbWFpbk5hbWVzKSxcbiAgICAgIHNlc3Npb25fdHRsX3NlY29uZHM6IFN0cmluZyhwcm9wcy5zZXNzaW9uVHRsU2Vjb25kcyA/PyAzNjAwKSxcbiAgICAgIHJlZnJlc2hfdHRsX2RheXM6IFN0cmluZyhwcm9wcy5yZWZyZXNoVHRsRGF5cyA/PyAzMCksXG4gICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF9wYXRoOiBwcm9wcy5wb3N0TG9nb3V0UmVkaXJlY3RQYXRoID8/ICcvJyxcbiAgICAgIGNvbmZpZ19yZWdpb246IHByb3BzLmF1dGhSZWdpb24sXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbmZpZ1B5ID0gdGhpcy5yZW5kZXJDb25maWdQeShiYXNlU2VjcmV0TmFtZSwgZXh0cmFDb25maWdTZWNyZXQuc2VjcmV0TmFtZSwgcHJvcHMuYXV0aFJlZ2lvbiwgc3RhdGljT3ZlcnJpZGVzKTtcblxuICAgIC8vIFNoYXJlZCBJQU0gZ3JhbnRzIGZhY3RvcnkgZm9yIHRoZSBlZGdlIExhbWJkYXMuXG4gICAgY29uc3QgZ3JhbnRDb21tb24gPSAocm9sZTogaWFtLklSb2xlLCBvcHRzOiB7IGttczogYm9vbGVhbjsgZGRiOiBib29sZWFuOyBrdnM6IGJvb2xlYW47IGNvZ25pdG86IGJvb2xlYW47IGhvb2tTZWNyZXQ6IGJvb2xlYW4gfSk6IHZvaWQgPT4ge1xuICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsICdzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldCddLFxuICAgICAgICByZXNvdXJjZXM6IFtjb25maWdTZWNyZXRBcm4sIGV4dHJhQ29uZmlnU2VjcmV0LnNlY3JldEFybl0sXG4gICAgICB9KSk7XG4gICAgICBpZiAob3B0cy5ob29rU2VjcmV0ICYmIHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm4pIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMua21zKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBba21zS2V5QXJuXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuZGRiKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2R5bmFtb2RiOkdldEl0ZW0nLCAnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpEZWxldGVJdGVtJywgJ2R5bmFtb2RiOlF1ZXJ5J10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbYXV0aFRhYmxlQXJuLCBgJHthdXRoVGFibGVBcm59L2luZGV4LypgXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMua3ZzKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZnJvbnQta2V5dmFsdWVzdG9yZTpQdXRLZXknLCAnY2xvdWRmcm9udC1rZXl2YWx1ZXN0b3JlOkRlc2NyaWJlS2V5VmFsdWVTdG9yZSddLFxuICAgICAgICAgIHJlc291cmNlczogW2t2c0Fybl0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmNvZ25pdG8pIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnY29nbml0by1pZHA6SW5pdGlhdGVBdXRoJywgJ2NvZ25pdG8taWRwOlJldm9rZVRva2VuJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBlZGdlUm9sZSA9IChyb2xlSWQ6IHN0cmluZyk6IGlhbS5Sb2xlID0+IG5ldyBpYW0uUm9sZSh0aGlzLCByb2xlSWQsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5Db21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlZGdlbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gU2Vzc2lvbi1pc3N1YW5jZSBMYW1iZGEgKG5lZWRzIFB5SldUIGZvciBSUzI1NiDigJQgcmV1c2UgdGhlIGNvZ25pdG8tYXV0aCBidW5kbGUpLlxuICAgIGNvbnN0IGlzc3VhbmNlUm9sZSA9IGVkZ2VSb2xlKCdJc3N1YW5jZVJvbGUnKTtcbiAgICBncmFudENvbW1vbihpc3N1YW5jZVJvbGUsIHsga21zOiB0cnVlLCBkZGI6IHRydWUsIGt2czogZmFsc2UsIGNvZ25pdG86IGZhbHNlLCBob29rU2VjcmV0OiB0cnVlIH0pO1xuICAgIGNvbnN0IGlzc3VhbmNlRm4gPSB0aGlzLm1ha2VFZGdlRnVuY3Rpb24oJ1Nlc3Npb25Jc3N1YW5jZScsICdjb2duaXRvLWN1c3RvbXVpLXNlc3Npb24nLCBjb25maWdQeSwgaXNzdWFuY2VSb2xlLCB0cnVlKTtcblxuICAgIC8vIFJlZnJlc2ggKyBsb2dvdXQgTGFtYmRhcyAoYm90bzMgb25seSDigJQgbm8gYnVuZGxlZCBkZXBzKS5cbiAgICBsZXQgcmVmcmVzaEZuOiBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuZW5hYmxlUmVmcmVzaCkge1xuICAgICAgY29uc3QgcmVmcmVzaFJvbGUgPSBlZGdlUm9sZSgnUmVmcmVzaFJvbGUnKTtcbiAgICAgIGdyYW50Q29tbW9uKHJlZnJlc2hSb2xlLCB7IGttczogdHJ1ZSwgZGRiOiB0cnVlLCBrdnM6IGZhbHNlLCBjb2duaXRvOiB0cnVlLCBob29rU2VjcmV0OiBmYWxzZSB9KTtcbiAgICAgIHJlZnJlc2hGbiA9IHRoaXMubWFrZUVkZ2VGdW5jdGlvbignU2Vzc2lvblJlZnJlc2gnLCAnY29nbml0by1jdXN0b211aS1yZWZyZXNoJywgY29uZmlnUHksIHJlZnJlc2hSb2xlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgbGV0IGxvZ291dEZuOiBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmVuYWJsZUxvZ291dEVuZHBvaW50ID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvZ291dFJvbGUgPSBlZGdlUm9sZSgnTG9nb3V0Um9sZScpO1xuICAgICAgZ3JhbnRDb21tb24obG9nb3V0Um9sZSwgeyBrbXM6IHRydWUsIGRkYjogdHJ1ZSwga3ZzOiB0cnVlLCBjb2duaXRvOiB0cnVlLCBob29rU2VjcmV0OiBmYWxzZSB9KTtcbiAgICAgIGxvZ291dEZuID0gdGhpcy5tYWtlRWRnZUZ1bmN0aW9uKCdTZXNzaW9uTG9nb3V0JywgJ2NvZ25pdG8tY3VzdG9tdWktbG9nb3V0JywgY29uZmlnUHksIGxvZ291dFJvbGUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBSZXRhaW4gb2xkIExhbWJkYUBFZGdlIHZlcnNpb25zIG9uIGEgcmVhbCB1cGRhdGUvZGVsZXRlIOKAlCBlZGdlIHJlcGxpY2FzXG4gICAgLy8gdGFrZSBob3VycyB0byBkcmFpbiDigJQgYnV0IGxldCBDbG91ZEZvcm1hdGlvbiBkZWxldGUgYSB2ZXJzaW9uIHdob3NlXG4gICAgLy8gQ1JFQVRFIHdhcyByb2xsZWQgYmFjayAoUmV0YWluRXhjZXB0T25DcmVhdGUpLiBBIHBsYWluIFJFVEFJTiBvcnBoYW5zIHRoZVxuICAgIC8vIHZlcnNpb24gKGFuZCwgdGhyb3VnaCBpdCwgdGhlIGZ1bmN0aW9uIGFuZCBpdHMgSUFNIHJvbGUpIG9uIGEgZmFpbGVkXG4gICAgLy8gY3JlYXRlLCBibG9ja2luZyB0aGUgbmV4dCBkZXBsb3kncyBpbXBvcnQ7IFJFVEFJTl9PTl9VUERBVEVfT1JfREVMRVRFXG4gICAgLy8ga2VlcHMgdGhlIGRyYWluLXNhZmUgcmV0YWluIGJlaGF2aW91ciB3aXRob3V0IHRoZSBvcnBoYW4uXG4gICAgZm9yIChjb25zdCBmbiBvZiBbaXNzdWFuY2VGbiwgcmVmcmVzaEZuLCBsb2dvdXRGbl0pIHtcbiAgICAgIGlmICghZm4pIGNvbnRpbnVlO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGZuLmN1cnJlbnRWZXJzaW9uLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvcmUuQ2ZuUmVzb3VyY2U7XG4gICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uLmFwcGx5UmVtb3ZhbFBvbGljeShjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOX09OX1VQREFURV9PUl9ERUxFVEUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50T3JpZ2luOiBjbG91ZGZyb250LklPcmlnaW4gPSBhdHRhY2hNb2RlID8gcHJvcHMuYXV0aEVuZHBvaW50T3JpZ2luISA6IHByb3BzLmRlZmF1bHRCZWhhdmlvciEub3JpZ2luO1xuXG4gICAgLy8gQXV0aCBlbmRwb2ludHMgYXJlIFBPU1QtZHJpdmVuOyBDbG91ZEZyb250IG90aGVyd2lzZSBkZWZhdWx0cyB0byBHRVQvSEVBRFxuICAgIC8vIGFuZCByZWplY3RzIHRoZSBQT1NUIHRoZXNlIGVuZHBvaW50cyByZXF1aXJlLiBBbGxvdyBhbGwgbWV0aG9kcyBieSBkZWZhdWx0LlxuICAgIGNvbnN0IGF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzID0gcHJvcHMuYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHMgPz8gY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcy5BTExPV19BTEw7XG5cbiAgICBjb25zdCBlbmRwb2ludE9wdHMgPSAoZm46IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiwgaW5jbHVkZUJvZHk6IGJvb2xlYW4pOiBjbG91ZGZyb250LkFkZEJlaGF2aW9yT3B0aW9ucyA9PiAoe1xuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICBhbGxvd2VkTWV0aG9kczogYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHMsXG4gICAgICAvLyBTZXQtQ29va2llIG11c3QgcmVhY2ggdGhlIHZpZXdlciDigJQgY2FjaGluZyBkaXNhYmxlZC5cbiAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICBlZGdlTGFtYmRhczogW3tcbiAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiBmbi5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIGluY2x1ZGVCb2R5OiBpbmNsdWRlQm9keSxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgaWYgKGF0dGFjaE1vZGUpIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gcHJvcHMuZGlzdHJpYnV0aW9uITtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKHNlc3Npb25Jc3N1YW5jZVBhdGgsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMoaXNzdWFuY2VGbiwgdHJ1ZSkpO1xuICAgICAgaWYgKHJlZnJlc2hGbikge1xuICAgICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcignL29hdXRoMi9yZWZyZXNoJywgZW5kcG9pbnRPcmlnaW4sIGVuZHBvaW50T3B0cyhyZWZyZXNoRm4sIGZhbHNlKSk7XG4gICAgICB9XG4gICAgICBpZiAobG9nb3V0Rm4pIHtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoJy9vYXV0aDIvbG9nb3V0JywgZW5kcG9pbnRPcmlnaW4sIGVuZHBvaW50T3B0cyhsb2dvdXRGbiwgdHJ1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsQmVoYXZpb3JzOiBSZWNvcmQ8c3RyaW5nLCBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucz4gPSB7XG4gICAgICAgIFtzZXNzaW9uSXNzdWFuY2VQYXRoXTogeyBvcmlnaW46IGVuZHBvaW50T3JpZ2luLCAuLi5lbmRwb2ludE9wdHMoaXNzdWFuY2VGbiwgdHJ1ZSkgfSxcbiAgICAgIH07XG4gICAgICBpZiAocmVmcmVzaEZuKSB7XG4gICAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnNbJy9vYXV0aDIvcmVmcmVzaCddID0geyBvcmlnaW46IGVuZHBvaW50T3JpZ2luLCAuLi5lbmRwb2ludE9wdHMocmVmcmVzaEZuLCBmYWxzZSkgfTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2dvdXRGbikge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzWycvb2F1dGgyL2xvZ291dCddID0geyBvcmlnaW46IGVuZHBvaW50T3JpZ2luLCAuLi5lbmRwb2ludE9wdHMobG9nb3V0Rm4sIHRydWUpIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uKHRoaXMsICdEaXN0cmlidXRpb24nLCB7XG4gICAgICAgIGh0dHBWZXJzaW9uOiBjbG91ZGZyb250Lkh0dHBWZXJzaW9uLkhUVFAyX0FORF8zLFxuICAgICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBwcm9wcy5taW5pbXVtUHJvdG9jb2xWZXJzaW9uID8/IGNsb3VkZnJvbnQuU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDI1LFxuICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgICAuLi5wcm9wcy5kZWZhdWx0QmVoYXZpb3IhLFxuICAgICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiB0aGlzLm1lcmdlRnVuY3Rpb25Bc3NvY2lhdGlvbnMoXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRnVuY3Rpb25Bc3NvY2lhdGlvbnMocHJvcHMuZGVmYXVsdEV4dGVuc2lvbnMsIHByb3BzLmRlZmF1bHRFeHRlbnNpb25Db25maWcpLFxuICAgICAgICAgICAgcHJvcHMuZGVmYXVsdEJlaGF2aW9yIS5mdW5jdGlvbkFzc29jaWF0aW9ucyxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiBhZGRpdGlvbmFsQmVoYXZpb3JzLFxuICAgICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jZXJ0aWZpY2F0ZSEsXG4gICAgICAgIHdlYkFjbElkOiBwcm9wcy53ZWJBY2xJZCxcbiAgICAgICAgZGVmYXVsdFJvb3RPYmplY3Q6IHByb3BzLmRlZmF1bHRSb290T2JqZWN0ID8/ICdpbmRleC5odG1sJyxcbiAgICAgICAgZXJyb3JSZXNwb25zZXM6IHByb3BzLmVuYWJsZUVycm9yUmVzcG9uc2VzID8gW1xuICAgICAgICAgIHsgaHR0cFN0YXR1czogNDAzLCByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCwgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsIHR0bDogY29yZS5EdXJhdGlvbi5taW51dGVzKDUpIH0sXG4gICAgICAgICAgeyBodHRwU3RhdHVzOiA0MDQsIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLCByZXNwb25zZVBhZ2VQYXRoOiBwcm9wcy5lcnJvclJlc3BvbnNlUGFnZVBhdGggPz8gJy9lcnJvci5odG1sJywgdHRsOiBjb3JlLkR1cmF0aW9uLm1pbnV0ZXMoNSkgfSxcbiAgICAgICAgXSA6IFtdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGJlaGF2aW91ci4gUGFzcyBgb3B0aW9ucy5leHRlbnNpb25zID0gW0V4dGVuc2lvbi5SRVFVSVJFX0FVVEhdYCB0b1xuICAgKiBwcm90ZWN0IHRoZSBwYXRoICh1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2UgYW5kXG4gICAqIHZhbGlkYXRlZCBpZGVudGl0eSBjbGFpbXMgYXJlIGluamVjdGVkIGFzIG9yaWdpbiBoZWFkZXJzKS5cbiAgICovXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luLFxuICAgIG9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT4gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwge1xuICAgICAgLi4ub3B0aW9ucy5iZWhhdmlvck9wdGlvbnMsXG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5tZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgICAgICB0aGlzLmJ1aWxkRnVuY3Rpb25Bc3NvY2lhdGlvbnMob3B0aW9ucy5leHRlbnNpb25zLCBvcHRpb25zLmV4dGVuc2lvbkNvbmZpZyksXG4gICAgICAgIG9wdGlvbnMuYmVoYXZpb3JPcHRpb25zPy5mdW5jdGlvbkFzc29jaWF0aW9ucyxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdHdvIHNldHMgb2YgZnVuY3Rpb24gYXNzb2NpYXRpb25zLCBlbmZvcmNpbmcgQ2xvdWRGcm9udCdzIHJ1bGUgb2Ygb25lXG4gICAqIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIuIFRoZSBsaWJyYXJ5IG5ldmVyIGNvbXBvc2VzIG9yIGluc3BlY3RzXG4gICAqIGEgY29uc3VtZXIncyBmdW5jdGlvbiDigJQgaXQgb25seSBhdHRhY2hlcyBpdDsgY29tYmluaW5nIHR3byBmdW5jdGlvbnMgb24gdGhlXG4gICAqIHNhbWUgZXZlbnQgdHlwZSBpcyB0aGUgY29uc3VtZXIncyByZXNwb25zaWJpbGl0eSAoYSBzaW5nbGUgZnVuY3Rpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSBtZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgIGF1dGg/OiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSxcbiAgICBjb25zdW1lcj86IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdLFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWxsID0gWy4uLihhdXRoID8/IFtdKSwgLi4uKGNvbnN1bWVyID8/IFtdKV07XG4gICAgaWYgKGFsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PGNsb3VkZnJvbnQuRnVuY3Rpb25FdmVudFR5cGU+KCk7XG4gICAgZm9yIChjb25zdCBmYSBvZiBhbGwpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhmYS5ldmVudFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xvdWRGcm9udCBhbGxvd3Mgb25seSBvbmUgZnVuY3Rpb24gcGVyIGV2ZW50IHR5cGUgcGVyIGJlaGF2aW91ciwgYnV0IHR3byAnJHtmYS5ldmVudFR5cGV9JyBgICtcbiAgICAgICAgICAnZnVuY3Rpb25zIHdlcmUgc3VwcGxpZWQgKGUuZy4gUkVRVUlSRV9BVVRIIHBsdXMgeW91ciBvd24gZnVuY3Rpb24pLiBLZWVwIGF1dGggYW5kIHlvdXIgb3RoZXIgJyArXG4gICAgICAgICAgJ2Z1bmN0aW9uIG9uIHNlcGFyYXRlIHBhdGggYmVoYXZpb3Vycywgb3IgY29tYmluZSB0aGVtIGludG8gYSBzaW5nbGUgZnVuY3Rpb24geW91cnNlbGYuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGZhLmV2ZW50VHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBhbGw7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgUFJPVEVDVEVEIGJlaGF2aW91cjogdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzIHJlZGlyZWN0IHRvIHRoZSBsb2dpblxuICAgKiBwYWdlIGFuZCB2YWxpZGF0ZWQgaWRlbnRpdHkgY2xhaW1zIGFyZSBpbmplY3RlZCBhcyBvcmlnaW4gaGVhZGVycy5cbiAgICogQ29udmVuaWVuY2Ugd3JhcHBlciBvdmVyIHtAbGluayBhZGRCZWhhdmlvcn0gdGhhdCBlbnN1cmVzIFJFUVVJUkVfQVVUSC5cbiAgICovXG4gIHB1YmxpYyBwcm90ZWN0KFxuICAgIHBhdGhQYXR0ZXJuOiBzdHJpbmcsXG4gICAgb3JpZ2luOiBjbG91ZGZyb250LklPcmlnaW4sXG4gICAgb3B0aW9uczogQWRkQmVoYXZpb3JPcHRpb25zPFRSb2xlPiA9IHt9LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBleHRlbnNpb25zID0gb3B0aW9ucy5leHRlbnNpb25zID8gWy4uLm9wdGlvbnMuZXh0ZW5zaW9uc10gOiBbXTtcbiAgICBpZiAoIWV4dGVuc2lvbnMuaW5jbHVkZXMoRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCkpIHtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChFeHRlbnNpb24uUkVRVUlSRV9BVVRIKTtcbiAgICB9XG4gICAgdGhpcy5hZGRCZWhhdmlvcihwYXRoUGF0dGVybiwgb3JpZ2luLCB7IC4uLm9wdGlvbnMsIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbXBvc2VkIHZpZXdlci1yZXF1ZXN0IGF1dGgtY2hlY2sgZnVuY3Rpb24gKFJFUVVJUkVfQVVUSCkuIFVzZWZ1bCBpblxuICAgKiBBVFRBQ0ggTU9ERSB0byBhc3NvY2lhdGUgb3IgY29tcG9zZSBhdXRoIG9udG8gYSBiZWhhdmlvdXIgdGhpcyBjb25zdHJ1Y3QgZG9lc1xuICAgKiBub3Qgb3duIOKAlCBlLmcuIGFuIGV4aXN0aW5nIGRlZmF1bHQgYmVoYXZpb3VyLCB2aWEgYW4gTDEgb3ZlcnJpZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dGhGdW5jdGlvbigpOiBjbG91ZGZyb250LkZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NlZEF1dGhGdW5jdGlvbihbRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgIGV4dGVuc2lvbnM/OiBFeHRlbnNpb25bXSxcbiAgICBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+LFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFleHRlbnNpb25zIHx8IGV4dGVuc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gW3sgZnVuY3Rpb246IHRoaXMuY29tcG9zZWRBdXRoRnVuY3Rpb24oZXh0ZW5zaW9ucywgY29uZmlnKSwgZXZlbnRUeXBlOiBjbG91ZGZyb250LkZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNUIH1dO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb3NlZEF1dGhGdW5jdGlvbihcbiAgICBleHRlbnNpb25zOiBFeHRlbnNpb25bXSxcbiAgICBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+LFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZnVuY3Rpb25DYWNoZUtleShleHRlbnNpb25zLCBjb25maWcpO1xuICAgIGxldCBmdW5jID0gdGhpcy5jb21wb3NlZEZ1bmN0aW9ucy5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICghZnVuYykge1xuICAgICAgY29uc3QgY29kZSA9IHRoaXMuY29tcG9zZXIuY29tcG9zZShleHRlbnNpb25zLCBjb25maWcsIHtcbiAgICAgICAgbG9naW5SZWRpcmVjdFBhdGg6IHRoaXMubG9naW5SZWRpcmVjdFBhdGgsXG4gICAgICAgIGVuYWJsZUhlYWRlckluamVjdGlvbjogdGhpcy5lbmFibGVIZWFkZXJJbmplY3Rpb24sXG4gICAgICAgIGhlYWRlckluamVjdGlvbkNsYWltczogdGhpcy5oZWFkZXJJbmplY3Rpb25DbGFpbXMsXG4gICAgICAgIGVuYWJsZVJlZnJlc2g6IHRoaXMuZW5hYmxlUmVmcmVzaCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IGBDb21wb3NlZEZuJHtleHRlbnNpb25zLm1hcChlID0+IGUucmVwbGFjZSgnUkVRVUlSRV8nLCAnJykpLmpvaW4oJycpfSR7dGhpcy5jb21wb3NlZEZ1bmN0aW9ucy5zaXplfWA7XG4gICAgICBjb25zdCBuZWVkc0t2cyA9IGV4dGVuc2lvbnMuaW5jbHVkZXMoRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCk7XG4gICAgICBmdW5jID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgZnVuY3Rpb25JZCwgbmVlZHNLdnNcbiAgICAgICAgPyB7IGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoY29kZSksIHJ1bnRpbWU6IGNsb3VkZnJvbnQuRnVuY3Rpb25SdW50aW1lLkpTXzJfMCwgY29tbWVudDogYEN1c3RvbS1VSTogJHtleHRlbnNpb25zLmpvaW4oJywgJyl9YCwga2V5VmFsdWVTdG9yZTogdGhpcy5rdnMgfVxuICAgICAgICA6IHsgY29kZTogY2xvdWRmcm9udC5GdW5jdGlvbkNvZGUuZnJvbUlubGluZShjb2RlKSwgcnVudGltZTogY2xvdWRmcm9udC5GdW5jdGlvblJ1bnRpbWUuSlNfMl8wLCBjb21tZW50OiBgQ3VzdG9tLVVJOiAke2V4dGVuc2lvbnMuam9pbignLCAnKX1gIH0pO1xuICAgICAgaWYgKHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbikge1xuICAgICAgICBmdW5jLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uID0gZnVuYztcbiAgICAgIHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuc2V0KGNhY2hlS2V5LCBmdW5jKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cblxuICBwcml2YXRlIGZ1bmN0aW9uQ2FjaGVLZXkoZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gW2V4dGVuc2lvbnMuc2xpY2UoKS5zb3J0KCkuam9pbignLCcpXTtcbiAgICBpZiAoY29uZmlnPy5yZXF1aXJlZFJvbGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbmZpZy5yZXF1aXJlZFJvbGVzLnNsaWNlKCkuc29ydCgpLmpvaW4oJywnKSk7XG4gICAgfVxuICAgIGlmIChjb25maWc/LnJvbGVNYXRjaE1vZGUgJiYgY29uZmlnLnJvbGVNYXRjaE1vZGUgIT09IFJvbGVNYXRjaE1vZGUuT1IpIHtcbiAgICAgIHBhcnRzLnB1c2goY29uZmlnLnJvbGVNYXRjaE1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignfCcpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDb25maWdQeShcbiAgICBiYXNlU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIGV4dHJhU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHN0YXRpY092ZXJyaWRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2ltcG9ydCBqc29uJyxcbiAgICAgICdpbXBvcnQgbG9nZ2luZycsXG4gICAgICAnaW1wb3J0IGJvdG8zJyxcbiAgICAgICcnLFxuICAgICAgJ2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCknLFxuICAgICAgYEJBU0VfU0VDUkVUX05BTUUgPSAke0pTT04uc3RyaW5naWZ5KGJhc2VTZWNyZXROYW1lKX1gLFxuICAgICAgYEVYVFJBX1NFQ1JFVF9OQU1FID0gJHtKU09OLnN0cmluZ2lmeShleHRyYVNlY3JldE5hbWUpfWAsXG4gICAgICBgQ09ORklHX1JFR0lPTiA9ICR7SlNPTi5zdHJpbmdpZnkocmVnaW9uKX1gLFxuICAgICAgYFNUQVRJQ19PVkVSUklERVMgPSAke0pTT04uc3RyaW5naWZ5KHN0YXRpY092ZXJyaWRlcyl9YCxcbiAgICAgICcnLFxuICAgICAgJ19zbSA9IE5vbmUnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICdkZWYgX2NsaWVudCgpOicsXG4gICAgICAnICAgIGdsb2JhbCBfc20nLFxuICAgICAgJyAgICBpZiBfc20gaXMgTm9uZTonLFxuICAgICAgJyAgICAgICAgX3NtID0gYm90bzMuY2xpZW50KFwic2VjcmV0c21hbmFnZXJcIiwgcmVnaW9uX25hbWU9Q09ORklHX1JFR0lPTiknLFxuICAgICAgJyAgICByZXR1cm4gX3NtJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnZGVmIGdldF9jb25maWcoKTonLFxuICAgICAgJyAgICBjZmcgPSBqc29uLmxvYWRzKF9jbGllbnQoKS5nZXRfc2VjcmV0X3ZhbHVlKFNlY3JldElkPUJBU0VfU0VDUkVUX05BTUUpW1wiU2VjcmV0U3RyaW5nXCJdKScsXG4gICAgICAnICAgIHRyeTonLFxuICAgICAgJyAgICAgICAgY2ZnLnVwZGF0ZShqc29uLmxvYWRzKF9jbGllbnQoKS5nZXRfc2VjcmV0X3ZhbHVlKFNlY3JldElkPUVYVFJBX1NFQ1JFVF9OQU1FKVtcIlNlY3JldFN0cmluZ1wiXSkpJyxcbiAgICAgICcgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOicsXG4gICAgICAnICAgICAgICBsb2dnZXIuZXJyb3IoXCJleHRyYSBjb25maWcgbG9hZCBmYWlsZWQ6ICVzXCIsIGUpJyxcbiAgICAgICcgICAgY2ZnLnVwZGF0ZShTVEFUSUNfT1ZFUlJJREVTKScsXG4gICAgICAnICAgIHJldHVybiBjZmcnLFxuICAgICAgJycsXG4gICAgXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUVkZ2VGdW5jdGlvbihcbiAgICBpZDogc3RyaW5nLFxuICAgIHNvdXJjZURpck5hbWU6IHN0cmluZyxcbiAgICBjb25maWdQeTogc3RyaW5nLFxuICAgIHJvbGU6IGlhbS5JUm9sZSxcbiAgICByZXVzZUNvZ25pdG9CdW5kbGU6IGJvb2xlYW4sXG4gICk6IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYScsIHNvdXJjZURpck5hbWUpO1xuICAgIGNvbnN0IGJ1bmRsZWREZXBzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS1idW5kbGVkL2NvZ25pdG8tYXV0aCcpO1xuICAgIGNvbnN0IHRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjdXN0b211aS1hdXRoLScpKTtcbiAgICBjb25zdCBjb25maWdQeVBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1B5UGF0aCwgY29uZmlnUHkpO1xuXG4gICAgcmV0dXJuIG5ldyBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24odGhpcywgaWQsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmxhbWJkYV9oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHNvdXJjZURpciwge1xuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICB0cnlCdW5kbGUob3V0cHV0RGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgaWYgKHJldXNlQ29nbml0b0J1bmRsZSAmJiBmcy5leGlzdHNTeW5jKGJ1bmRsZWREZXBzRGlyKSkge1xuICAgICAgICAgICAgICAgIGZzLmNwU3luYyhidW5kbGVkRGVwc0Rpciwgb3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZnMucmVhZGRpclN5bmMoc291cmNlRGlyKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlID09PSAncmVxdWlyZW1lbnRzLnR4dCcpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZzLmNwU3luYyhwYXRoLmpvaW4oc291cmNlRGlyLCBmaWxlKSwgcGF0aC5qb2luKG91dHB1dERpciwgZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKSwgY29uZmlnUHkpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbWFnZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgICAnYmFzaCcsICctYycsXG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0ICYmIGNwIC1yIC4gL2Fzc2V0LW91dHB1dCAmJiBjcCAvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHkgL2Fzc2V0LW91dHB1dC9jb25maWdfZ2VuZXJhdGVkLnB5JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZvbHVtZXM6IFt7IGhvc3RQYXRoOiBjb25maWdQeVBhdGgsIGNvbnRhaW5lclBhdGg6ICcvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHknIH1dLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
411
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1jdXN0b211aS1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nsb3VkZnJvbnQvcGF0dGVybnMvY29nbml0by1jdXN0b211aS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FPcUI7QUFDckIsdURBQXlDO0FBQ3pDLDJEQUFvRztBQUNwRyxpRkFBNkU7QUEwSDdFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsbUJBQW1ELFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFZMUYsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFzQztRQUN6RixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDO1FBQ3BELElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcscUJBQUcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sU0FBUyxHQUFHLHFCQUFHLENBQUMs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QUUsU0FBUztnQ0FDMUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RixDQUFDOzRCQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDeEUsT0FBTyxJQUFJLENBQUM7d0JBQ2QsQ0FBQztxQkFDRjtvQkFDRCxLQUFLLEVBQUUsd0JBQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWE7b0JBQy9DLE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsSUFBSTt3QkFDWiw0SUFBNEk7cUJBQzdJO29CQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztpQkFDakY7YUFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBN2FELGtEQTZhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIgYXMgYWNtLFxuICBhd3NfY2xvdWRmcm9udCBhcyBjbG91ZGZyb250LFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX3NzbSBhcyBzc20sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBFeHRlbnNpb24sIEV4dGVuc2lvbkNvbmZpZywgQWRkQmVoYXZpb3JPcHRpb25zLCBSb2xlTWF0Y2hNb2RlIH0gZnJvbSAnLi9zZWN1cmVkQ2xvdWRGcm9udCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNvbXBvc2VyIH0gZnJvbSAnLi4vY2xvdWRmcm9udC1mdW5jdGlvbnMvZnVuY3Rpb24tY29tcG9zZXInO1xuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgQ29nbml0b0N1c3RvbVVpQXV0aH0uXG4gKlxuICogQ29uZmlndXJlcyBjdXN0b21lciBhdXRoZW50aWNhdGlvbiBmb3IgYSBzdG9yZWZyb250IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gKiB1c2luZyBBV1MgQ29nbml0byB3aXRoIGEgZmlyc3QtcGFydHkgKGN1c3RvbSkgbG9naW4gVUkuIFVuYXV0aGVudGljYXRlZFxuICogcmVxdWVzdHMgdG8gcHJvdGVjdGVkIHBhdGhzIGFyZSByZWRpcmVjdGVkIHRvIHtAbGluayB1bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGh9XG4gKiBvbiB0aGUgYnJhbmQncyBvd24gZG9tYWluIOKAlCBuZXZlciB0byBhIENvZ25pdG8gaG9zdGVkIFVJLiBUaGUgbG9naW4gcGFnZVxuICogcGVyZm9ybXMgU1JQIGNsaWVudC1zaWRlIGFuZCBQT1NUcyB0aGUgcmVzdWx0aW5nIHRva2VucyB0byB0aGUgc2Vzc2lvbi1pc3N1YW5jZVxuICogZW5kcG9pbnQ7IENvZ25pdG8gdG9rZW5zIGFyZSBuZXZlciBzdG9yZWQgaW4gdGhlIGJyb3dzZXIuXG4gKlxuICogVGhlIGJhY2tlbmQgKHVzZXIgcG9vbCwgSE1BQyBrZXksIGF1dGggdGFibGUsIEtWUywgY29uZmlnIHNlY3JldCkgaXMgcHJvdmlkZWRcbiAqIGJ5IHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfSBhbmQgcmVmZXJlbmNlZCBoZXJlIHZpYSBTU00gcGFyYW1ldGVyc1xuICogd3JpdHRlbiB1bmRlciB7QGxpbmsgYXV0aFNzbVBhcmFtUHJlZml4fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQ3VzdG9tVWlBdXRoUHJvcHM8VFJvbGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIENSRUFURSBNT0RFOiBkZWZhdWx0IGNhY2hlIGJlaGF2aW91ciBmb3IgYSBkaXN0cmlidXRpb24gdGhpcyBjb25zdHJ1Y3Qgd2lsbFxuICAgKiBjcmVhdGUuIFByb3ZpZGUgd2l0aCB7QGxpbmsgY2VydGlmaWNhdGV9LiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgKiB7QGxpbmsgZGlzdHJpYnV0aW9ufS4gWW91IE1BWSBzZXQgYGZ1bmN0aW9uQXNzb2NpYXRpb25zYCBoZXJlIChlLmcuIGFcbiAgICogZ2VvLXJvdXRpbmcgdmlld2VyLXJlcXVlc3QgZnVuY3Rpb24pIOKAlCBpdCBpcyBtZXJnZWQgd2l0aCB0aGUgYXV0aC1jaGVja1xuICAgKiBmdW5jdGlvbjsgQ2xvdWRGcm9udCdzIG9uZS1mdW5jdGlvbi1wZXItZXZlbnQtdHlwZSBydWxlIGlzIGVuZm9yY2VkIHdpdGggYVxuICAgKiBjbGVhciBlcnJvciByYXRoZXIgdGhhbiBhbiBMMSBvdmVycmlkZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCZWhhdmlvcj86IGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zO1xuICAvKiogRG9tYWluIG5hbWVzIGZvciB0aGUgYXV0aCBjb25maWcgKGFsbG93ZWRfZG9tYWlucyk7IGZpcnN0IGlzIGNhbm9uaWNhbC4gUmVxdWlyZWQgaW4gYm90aCBtb2Rlcy4gKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc2hhcmVkIHNlc3Npb24gY29uZmlnIHNlY3JldCB0aGUgZWRnZSBMYW1iZGFzIGZldGNoIGJ5IG5hbWUuXG4gICAqIE1VU1QgbWF0Y2ggdGhlIG5hbWUgdGhlIHtAbGluayBDb2duaXRvU2Vzc2lvbkJhY2tlbmR9IGNyZWF0ZWQgaXQgdW5kZXIuXG4gICAqIE92ZXJyaWRlIHRvIGRlY291cGxlIGZyb20gdGhlIGNhbm9uaWNhbCBkb21haW4uXG4gICAqIEBkZWZhdWx0IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7ZG9tYWluTmFtZXNbMF19YFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU2VjcmV0TmFtZT86IHN0cmluZztcbiAgLyoqIENSRUFURSBNT0RFOiBBQ00gY2VydGlmaWNhdGUgKHVzLWVhc3QtMSkgY292ZXJpbmcge0BsaW5rIGRvbWFpbk5hbWVzfS4gKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBhY20uSUNlcnRpZmljYXRlO1xuICAvKiogQ1JFQVRFIE1PREU6IFdBRiB3ZWIgQUNMIEFSTiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY3JlYXRlZCBkaXN0cmlidXRpb24uICovXG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xuICAvKipcbiAgICogQVRUQUNIIE1PREU6IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiB0byBhZGQgdGhlIGF1dGggZW5kcG9pbnQgKyBwcm90ZWN0ZWRcbiAgICogYmVoYXZpb3VycyB0bywgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXG4gICAqIHtAbGluayBkZWZhdWx0QmVoYXZpb3J9L3tAbGluayBjZXJ0aWZpY2F0ZX0uIENsb3VkRnJvbnQgYWxsb3dzIG9ubHkgb25lXG4gICAqIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIsIHNvIHRoZSBhdXRoLWNoZWNrIGlzIGFkZGVkIHRvIHByb3RlY3RlZFxuICAgKiBQQVRIIGJlaGF2aW91cnMgKHZpYSB7QGxpbmsgcHJvdGVjdH0pIOKAlCBpdCBpcyBOT1QgZm9yY2VkIG9udG8gdGhlIGV4aXN0aW5nXG4gICAqIGRlZmF1bHQgYmVoYXZpb3VyLiBVc2Uge0BsaW5rIGF1dGhGdW5jdGlvbn0gdG8gY29tcG9zZSBpdCB0aGVyZSB5b3Vyc2VsZi5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogT3JpZ2luIGZvciB0aGUgYXV0aCBlbmRwb2ludCBiZWhhdmlvdXJzIChpc3N1YW5jZSAvIHJlZnJlc2ggLyBsb2dvdXQpLiBUaGVzZVxuICAgKiBlbmRwb2ludHMgYXJlIGdlbmVyYXRlZCBlbnRpcmVseSBieSBMYW1iZGFARWRnZSBhbmQgbmV2ZXIgcmVhY2ggdGhlIG9yaWdpbixcbiAgICogYnV0IGEgQ2xvdWRGcm9udCBiZWhhdmlvdXIgc3RpbGwgcmVxdWlyZXMgb25lLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0aGUge0BsaW5rIGRlZmF1bHRCZWhhdmlvcn0gb3JpZ2luLiBTZXQgdGhpcyB0byBhIE5PTi1WUEMgb3JpZ2luXG4gICAqIChmb3IgZXhhbXBsZSBhbiBTMyBvcmlnaW4gYWxyZWFkeSBvbiB0aGUgZGlzdHJpYnV0aW9uKSB3aGVuIHRoZSBkZWZhdWx0XG4gICAqIGJlaGF2aW91cidzIG9yaWdpbiBpcyBhIENsb3VkRnJvbnQgVlBDIG9yaWdpbjogQVdTIGRvZXMgbm90IGFsbG93IGFuXG4gICAqIG9yaWdpbi1yZXF1ZXN0IExhbWJkYUBFZGdlIGFzc29jaWF0aW9uIG9uIGEgVlBDLW9yaWdpbiBiZWhhdmlvdXIsIGFuZCB0aGVzZVxuICAgKiBlbmRwb2ludHMgcnVuIGF0IG9yaWdpbi1yZXF1ZXN0LiBSRVFVSVJFRCBpbiBBVFRBQ0ggTU9ERSAod2hlblxuICAgKiB7QGxpbmsgZGlzdHJpYnV0aW9ufSBpcyBzZXQpLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aEVuZHBvaW50T3JpZ2luPzogY2xvdWRmcm9udC5JT3JpZ2luO1xuICAvKipcbiAgICogU1NNIHBhcmFtZXRlciBwcmVmaXggdW5kZXIgd2hpY2gge0BsaW5rIENvZ25pdG9BdXRoSW5mcmFzdHJ1Y3R1cmV9IHB1Ymxpc2hlZFxuICAgKiBgY29uZmlnU2VjcmV0QXJuYCwgYGttc0tleUFybmAsIGBhdXRoVGFibGVBcm5gLCBga3ZzQXJuYCwgYGNvZ25pdG9Eb21haW5gLFxuICAgKiBgY2xpZW50SWRgIGFuZCBgdXNlclBvb2xJZGAuXG4gICAqL1xuICByZWFkb25seSBhdXRoU3NtUGFyYW1QcmVmaXg6IHN0cmluZztcbiAgLyoqIFJlZ2lvbiB0aGUgYXV0aCBiYWNrZW5kIChjb25maWcgc2VjcmV0LCBhdXRoIHRhYmxlKSBsaXZlcyBpbi4gKi9cbiAgcmVhZG9ubHkgYXV0aFJlZ2lvbjogc3RyaW5nO1xuICAvKiogRmlyc3QtcGFydHkgcGF0aCB1bmF1dGhlbnRpY2F0ZWQgdXNlcnMgYXJlIHJlZGlyZWN0ZWQgdG8uIEBkZWZhdWx0ICcvbG9naW4nICovXG4gIHJlYWRvbmx5IHVuYXV0aGVudGljYXRlZFJlZGlyZWN0UGF0aD86IHN0cmluZztcbiAgLyoqIEV4dGVuc2lvbnMgYXBwbGllZCB0byB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuIEBkZWZhdWx0IFtdIChwdWJsaWMpICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeHRlbnNpb25zPzogRXh0ZW5zaW9uW107XG4gIC8qKiBSb2xlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVuc2lvbkNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT47XG4gIC8qKiBJbmplY3QgdmFsaWRhdGVkIGlkZW50aXR5IGNsYWltcyBhcyBvcmlnaW4gaGVhZGVycy4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBlbmFibGVIZWFkZXJJbmplY3Rpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFwIG9mIG9yaWdpbiBoZWFkZXIgbmFtZSB0byBzZXNzaW9uLUpXVCBjbGFpbSBrZXkuXG4gICAqIEBkZWZhdWx0IHsgJ3gtY3VzdG9tZXItaWQnOiAnY3VzdG9tZXJfaWQnLCAneC1jdXN0b21lci1lbWFpbCc6ICdlbWFpbCcgfVxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBhdGggb2YgdGhlIHNlc3Npb24taXNzdWFuY2UgZW5kcG9pbnQgKFBPU1QpLiBAZGVmYXVsdCAnL2F1dGgvc2Vzc2lvbicgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbklzc3VhbmNlUGF0aD86IHN0cmluZztcbiAgLyoqIE1vdW50IHRoZSBzaWxlbnQtcmVmcmVzaCBlbmRwb2ludCBhdCAnL29hdXRoMi9yZWZyZXNoJy4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBlbmFibGVSZWZyZXNoRW5kcG9pbnQ/OiBib29sZWFuO1xuICAvKiogTW91bnQgdGhlIGxvZ291dCBlbmRwb2ludCBhdCAnL29hdXRoMi9sb2dvdXQnIChQT1NUKS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBlbmFibGVMb2dvdXRFbmRwb2ludD86IGJvb2xlYW47XG4gIC8qKiBVUkwgb2YgdGhlIGlkZW50aXR5LWxpbmtpbmcgaG9vayB0aGUgaXNzdWFuY2UgZW5kcG9pbnQgY2FsbHMgdG8gcmVzb2x2ZSBjdXN0b21lcl9pZC4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlMaW5raW5nSG9va1VybDogc3RyaW5nO1xuICAvKiogU2VjcmV0cyBNYW5hZ2VyIEFSTiBvZiB0aGUgc2hhcmVkIHNlY3JldCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgaG9vay4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlMaW5raW5nSG9va1NlY3JldEFybj86IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSldUIGxpZmV0aW1lLCBzZWNvbmRzLiBAZGVmYXVsdCAzNjAwICovXG4gIHJlYWRvbmx5IHNlc3Npb25UdGxTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogU3RvcmVkIHJlZnJlc2gtdG9rZW4gbGlmZXRpbWUsIGRheXMuIEBkZWZhdWx0IDMwICovXG4gIHJlYWRvbmx5IHJlZnJlc2hUdGxEYXlzPzogbnVtYmVyO1xuICAvKiogUGF0aCB0byByZWRpcmVjdCB0byBhZnRlciBsb2dvdXQuIEBkZWZhdWx0ICcvJyAqL1xuICByZWFkb25seSBwb3N0TG9nb3V0UmVkaXJlY3RQYXRoPzogc3RyaW5nO1xuICAvKiogQWRkIFNQQSBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBlbmFibGVFcnJvclJlc3BvbnNlcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBwYWdlIHBhdGggd2hlbiB7QGxpbmsgZW5hYmxlRXJyb3JSZXNwb25zZXN9IGlzIHNldC4gQGRlZmF1bHQgJy9lcnJvci5odG1sJyAqL1xuICByZWFkb25seSBlcnJvclJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IHJvb3Qgb2JqZWN0LiBAZGVmYXVsdCAnaW5kZXguaHRtbCcgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJvb3RPYmplY3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDUkVBVEUgTU9ERTogbWluaW11bSBUTFMgc2VjdXJpdHkgcG9saWN5IGZvciB0aGUgY3JlYXRlZCBkaXN0cmlidXRpb24nc1xuICAgKiB2aWV3ZXIgY29ubmVjdGlvbnMuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50LWdlbmVyYXRpb24gcG9saWN5OyBvdmVycmlkZSBvbmx5XG4gICAqIHRvIHJlbGF4IGl0IChub3QgcmVjb21tZW5kZWQpLiBJZ25vcmVkIGluIEFUVEFDSCBNT0RFIOKAlCB0aGUgcGFzc2VkLWluXG4gICAqIGRpc3RyaWJ1dGlvbiBhbHJlYWR5IGZpeGVzIGl0cyBvd24gcG9saWN5LlxuICAgKiBAZGVmYXVsdCBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyNVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVByb3RvY29sVmVyc2lvbj86IGNsb3VkZnJvbnQuU2VjdXJpdHlQb2xpY3lQcm90b2NvbDtcbiAgLyoqXG4gICAqIEFsbG93ZWQgdmlld2VyIEhUVFAgbWV0aG9kcyBmb3IgdGhlIGF1dGggZW5kcG9pbnQgYmVoYXZpb3VycyAoc2Vzc2lvblxuICAgKiBpc3N1YW5jZSwgcmVmcmVzaCwgbG9nb3V0KS4gVGhlc2UgZW5kcG9pbnRzIGFyZSBQT1NULWRyaXZlbiwgc28gdGhlIGRlZmF1bHRcbiAgICogcGVybWl0cyBhbGwgbWV0aG9kczsgQ2xvdWRGcm9udCdzIEdFVC9IRUFEIGRlZmF1bHQgd291bGQgb3RoZXJ3aXNlIHJlamVjdCB0aGVcbiAgICogUE9TVCB0aGV5IHJlcXVpcmUuIE92ZXJyaWRlIHRvIG5hcnJvdyBpdCAobXVzdCBzdGlsbCBpbmNsdWRlIFBPU1QpLlxuICAgKiBAZGVmYXVsdCBjbG91ZGZyb250LkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHM/OiBjbG91ZGZyb250LkFsbG93ZWRNZXRob2RzO1xufVxuXG4vKipcbiAqIEN1c3RvbWVyIGF1dGhlbnRpY2F0aW9uIGZvciBhIHN0b3JlZnJvbnQgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdXNpbmcgQ29nbml0b1xuICogd2l0aCBhIGN1c3RvbSwgYnJhbmQtZG9tYWluIGxvZ2luIFVJLlxuICpcbiAqIE9XTlMgKGluIHRoaXMgbGlicmFyeSk6IHRoZSBlZGdlIHNlc3Npb24tdmFsaWRhdGlvbiBmdW5jdGlvbiAocmV1c2VkIHNoYXJlZFxuICogbW9kdWxlLCByZWRpcmVjdGluZyB0byBhIGZpcnN0LXBhcnR5IC9sb2dpbiksIHRoZSBzZXNzaW9uLWlzc3VhbmNlIC8gcmVmcmVzaCAvXG4gKiBsb2dvdXQgTGFtYmRhQEVkZ2UgZnVuY3Rpb25zLCBhbmQgdGhlaXIgSUFNIHdpcmluZy4gQ09OU1VNRVM6IHRoZSBDb2duaXRvXG4gKiBiYWNrZW5kIGZyb20ge0BsaW5rIENvZ25pdG9BdXRoSW5mcmFzdHJ1Y3R1cmV9LiBEb2VzIE5PVCBwcm92aXNpb24gdGhlIHVzZXJcbiAqIHBvb2wg4oCUIHRoYXQgaXMgdGhlIGJhY2tlbmQgY29uc3RydWN0J3Mgam9iLlxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b0N1c3RvbVVpQXV0aDxUUm9sZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9zZXI6IEZ1bmN0aW9uQ29tcG9zZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9zZWRGdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGNsb3VkZnJvbnQuRnVuY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGt2czogY2xvdWRmcm9udC5JS2V5VmFsdWVTdG9yZTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dpblJlZGlyZWN0UGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZUhlYWRlckluamVjdGlvbjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJJbmplY3Rpb25DbGFpbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlUmVmcmVzaDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsYXN0Q3JlYXRlZEZ1bmN0aW9uOiBjbG91ZGZyb250LkZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZ25pdG9DdXN0b21VaUF1dGhQcm9wczxUUm9sZT4pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgYXR0YWNoTW9kZSA9IHByb3BzLmRpc3RyaWJ1dGlvbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChhdHRhY2hNb2RlICYmICFwcm9wcy5hdXRoRW5kcG9pbnRPcmlnaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXV0aEVuZHBvaW50T3JpZ2luIGlzIHJlcXVpcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbicpO1xuICAgIH1cbiAgICBpZiAoIWF0dGFjaE1vZGUgJiYgKCFwcm9wcy5kZWZhdWx0QmVoYXZpb3IgfHwgIXByb3BzLmNlcnRpZmljYXRlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWZhdWx0QmVoYXZpb3IgYW5kIGNlcnRpZmljYXRlIGFyZSByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIGEgZGlzdHJpYnV0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcCA9IHByb3BzLmF1dGhTc21QYXJhbVByZWZpeDtcbiAgICBjb25zdCBjb25maWdTZWNyZXRBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2NvbmZpZ1NlY3JldEFybmApO1xuICAgIGNvbnN0IGttc0tleUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0va21zS2V5QXJuYCk7XG4gICAgY29uc3QgYXV0aFRhYmxlQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9hdXRoVGFibGVBcm5gKTtcbiAgICBjb25zdCBrdnNBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2t2c0FybmApO1xuXG4gICAgdGhpcy5rdnMgPSBjbG91ZGZyb250LktleVZhbHVlU3RvcmUuZnJvbUtleVZhbHVlU3RvcmVBcm4odGhpcywgJ0tWUycsIGt2c0Fybik7XG4gICAgdGhpcy5sb2dpblJlZGlyZWN0UGF0aCA9IHByb3BzLnVuYXV0aGVudGljYXRlZFJlZGlyZWN0UGF0aCA/PyAnL2xvZ2luJztcbiAgICB0aGlzLmVuYWJsZUhlYWRlckluamVjdGlvbiA9IHByb3BzLmVuYWJsZUhlYWRlckluamVjdGlvbiA/PyB0cnVlO1xuICAgIHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zID0gcHJvcHMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zID8/IHtcbiAgICAgICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJyxcbiAgICAgICd4LWN1c3RvbWVyLWVtYWlsJzogJ2VtYWlsJyxcbiAgICB9O1xuICAgIHRoaXMuZW5hYmxlUmVmcmVzaCA9IHByb3BzLmVuYWJsZVJlZnJlc2hFbmRwb2ludCA/PyB0cnVlO1xuICAgIHRoaXMuY29tcG9zZXIgPSBuZXcgRnVuY3Rpb25Db21wb3NlcigpO1xuICAgIHRoaXMuY29tcG9zZWRGdW5jdGlvbnMgPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdCBjYW5vbmljYWxEb21haW4gPSBwcm9wcy5kb21haW5OYW1lc1swXTtcbiAgICBjb25zdCBiYXNlU2VjcmV0TmFtZSA9IHByb3BzLmNvbmZpZ1NlY3JldE5hbWUgPz8gYGNsb3VkZnJvbnQtYXV0aC1jb25maWctJHtjYW5vbmljYWxEb21haW59YDtcbiAgICBjb25zdCBzZXNzaW9uSXNzdWFuY2VQYXRoID0gcHJvcHMuc2Vzc2lvbklzc3VhbmNlUGF0aCA/PyAnL2F1dGgvc2Vzc2lvbic7XG5cbiAgICAvLyBFeHRyYSBjb25maWcgc2VjcmV0IGZvciB2YWx1ZXMgdGhhdCBhcmUgQ0RLIHRva2VucyBhdCBzeW50aCB0aW1lIChhbmQgc29cbiAgICAvLyBjYW5ub3QgYmUgYmFrZWQgaW50byBjb25maWdfZ2VuZXJhdGVkLnB5KSDigJQgTGFtYmRhQEVkZ2UgZm9yYmlkcyBlbnYgdmFycy5cbiAgICBjb25zdCBleHRyYUNvbmZpZ1NlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgJ0N1c3RvbVVpQ29uZmlnU2VjcmV0Jywge1xuICAgICAgc2VjcmV0TmFtZTogYGNsb3VkZnJvbnQtY3VzdG9tdWktY29uZmlnLSR7Y2Fub25pY2FsRG9tYWlufWAsXG4gICAgICBzZWNyZXRPYmplY3RWYWx1ZToge1xuICAgICAgICBrdnNfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChrdnNBcm4pLFxuICAgICAgICBwb3N0X2F1dGhfaG9va191cmw6IGNvcmUuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tVcmwpLFxuICAgICAgICBwb3N0X2F1dGhfaG9va19zZWNyZXRfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuID8/ICcnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogYEN1c3RvbS1VSSBhdXRoIGNvbmZpZyBvdmVycmlkZXMgZm9yICR7Y2Fub25pY2FsRG9tYWlufWAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGF0aWNPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBsb2dpbl9yZWRpcmVjdF9wYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgYWxsb3dlZF9kb21haW5zOiBKU09OLnN0cmluZ2lmeShwcm9wcy5kb21haW5OYW1lcyksXG4gICAgICBzZXNzaW9uX3R0bF9zZWNvbmRzOiBTdHJpbmcocHJvcHMuc2Vzc2lvblR0bFNlY29uZHMgPz8gMzYwMCksXG4gICAgICByZWZyZXNoX3R0bF9kYXlzOiBTdHJpbmcocHJvcHMucmVmcmVzaFR0bERheXMgPz8gMzApLFxuICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfcGF0aDogcHJvcHMucG9zdExvZ291dFJlZGlyZWN0UGF0aCA/PyAnLycsXG4gICAgICBjb25maWdfcmVnaW9uOiBwcm9wcy5hdXRoUmVnaW9uLFxuICAgIH07XG5cbiAgICBjb25zdCBjb25maWdQeSA9IHRoaXMucmVuZGVyQ29uZmlnUHkoYmFzZVNlY3JldE5hbWUsIGV4dHJhQ29uZmlnU2VjcmV0LnNlY3JldE5hbWUsIHByb3BzLmF1dGhSZWdpb24sIHN0YXRpY092ZXJyaWRlcyk7XG5cbiAgICAvLyBTaGFyZWQgSUFNIGdyYW50cyBmYWN0b3J5IGZvciB0aGUgZWRnZSBMYW1iZGFzLlxuICAgIGNvbnN0IGdyYW50Q29tbW9uID0gKHJvbGU6IGlhbS5JUm9sZSwgb3B0czogeyBrbXM6IGJvb2xlYW47IGRkYjogYm9vbGVhbjsga3ZzOiBib29sZWFuOyBjb2duaXRvOiBib29sZWFuOyBob29rU2VjcmV0OiBib29sZWFuIH0pOiB2b2lkID0+IHtcbiAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnLCAnc2VjcmV0c21hbmFnZXI6RGVzY3JpYmVTZWNyZXQnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbY29uZmlnU2VjcmV0QXJuLCBleHRyYUNvbmZpZ1NlY3JldC5zZWNyZXRBcm5dLFxuICAgICAgfSkpO1xuICAgICAgaWYgKG9wdHMuaG9va1NlY3JldCAmJiBwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuaWRlbnRpdHlMaW5raW5nSG9va1NlY3JldEFybl0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmttcykge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydrbXM6RGVjcnlwdCddLFxuICAgICAgICAgIHJlc291cmNlczogW2ttc0tleUFybl0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmRkYikge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydkeW5hbW9kYjpHZXRJdGVtJywgJ2R5bmFtb2RiOlB1dEl0ZW0nLCAnZHluYW1vZGI6RGVsZXRlSXRlbScsICdkeW5hbW9kYjpRdWVyeSddLFxuICAgICAgICAgIHJlc291cmNlczogW2F1dGhUYWJsZUFybiwgYCR7YXV0aFRhYmxlQXJufS9pbmRleC8qYF0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmt2cykge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydjbG91ZGZyb250LWtleXZhbHVlc3RvcmU6UHV0S2V5JywgJ2Nsb3VkZnJvbnQta2V5dmFsdWVzdG9yZTpEZXNjcmliZUtleVZhbHVlU3RvcmUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtrdnNBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5jb2duaXRvKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NvZ25pdG8taWRwOkluaXRpYXRlQXV0aCcsICdjb2duaXRvLWlkcDpSZXZva2VUb2tlbiddLFxuICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZWRnZVJvbGUgPSAocm9sZUlkOiBzdHJpbmcpOiBpYW0uUm9sZSA9PiBuZXcgaWFtLlJvbGUodGhpcywgcm9sZUlkLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWRnZWxhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICApLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIFNlc3Npb24taXNzdWFuY2UgTGFtYmRhIChuZWVkcyBQeUpXVCBmb3IgUlMyNTYg4oCUIHJldXNlIHRoZSBjb2duaXRvLWF1dGggYnVuZGxlKS5cbiAgICBjb25zdCBpc3N1YW5jZVJvbGUgPSBlZGdlUm9sZSgnSXNzdWFuY2VSb2xlJyk7XG4gICAgZ3JhbnRDb21tb24oaXNzdWFuY2VSb2xlLCB7IGttczogdHJ1ZSwgZGRiOiB0cnVlLCBrdnM6IGZhbHNlLCBjb2duaXRvOiBmYWxzZSwgaG9va1NlY3JldDogdHJ1ZSB9KTtcbiAgICBjb25zdCBpc3N1YW5jZUZuID0gdGhpcy5tYWtlRWRnZUZ1bmN0aW9uKCdTZXNzaW9uSXNzdWFuY2UnLCAnY29nbml0by1jdXN0b211aS1zZXNzaW9uJywgY29uZmlnUHksIGlzc3VhbmNlUm9sZSwgdHJ1ZSk7XG5cbiAgICAvLyBSZWZyZXNoICsgbG9nb3V0IExhbWJkYXMgKGJvdG8zIG9ubHkg4oCUIG5vIGJ1bmRsZWQgZGVwcykuXG4gICAgbGV0IHJlZnJlc2hGbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmVuYWJsZVJlZnJlc2gpIHtcbiAgICAgIGNvbnN0IHJlZnJlc2hSb2xlID0gZWRnZVJvbGUoJ1JlZnJlc2hSb2xlJyk7XG4gICAgICBncmFudENvbW1vbihyZWZyZXNoUm9sZSwgeyBrbXM6IHRydWUsIGRkYjogdHJ1ZSwga3ZzOiBmYWxzZSwgY29nbml0bzogdHJ1ZSwgaG9va1NlY3JldDogZmFsc2UgfSk7XG4gICAgICByZWZyZXNoRm4gPSB0aGlzLm1ha2VFZGdlRnVuY3Rpb24oJ1Nlc3Npb25SZWZyZXNoJywgJ2NvZ25pdG8tY3VzdG9tdWktcmVmcmVzaCcsIGNvbmZpZ1B5LCByZWZyZXNoUm9sZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGxldCBsb2dvdXRGbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5lbmFibGVMb2dvdXRFbmRwb2ludCA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBsb2dvdXRSb2xlID0gZWRnZVJvbGUoJ0xvZ291dFJvbGUnKTtcbiAgICAgIGdyYW50Q29tbW9uKGxvZ291dFJvbGUsIHsga21zOiB0cnVlLCBkZGI6IHRydWUsIGt2czogdHJ1ZSwgY29nbml0bzogdHJ1ZSwgaG9va1NlY3JldDogZmFsc2UgfSk7XG4gICAgICBsb2dvdXRGbiA9IHRoaXMubWFrZUVkZ2VGdW5jdGlvbignU2Vzc2lvbkxvZ291dCcsICdjb2duaXRvLWN1c3RvbXVpLWxvZ291dCcsIGNvbmZpZ1B5LCBsb2dvdXRSb2xlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gUmV0YWluIG9sZCBMYW1iZGFARWRnZSB2ZXJzaW9ucyBvbiBhIHJlYWwgdXBkYXRlL2RlbGV0ZSDigJQgZWRnZSByZXBsaWNhc1xuICAgIC8vIHRha2UgaG91cnMgdG8gZHJhaW4g4oCUIGJ1dCBsZXQgQ2xvdWRGb3JtYXRpb24gZGVsZXRlIGEgdmVyc2lvbiB3aG9zZVxuICAgIC8vIENSRUFURSB3YXMgcm9sbGVkIGJhY2sgKFJldGFpbkV4Y2VwdE9uQ3JlYXRlKS4gQSBwbGFpbiBSRVRBSU4gb3JwaGFucyB0aGVcbiAgICAvLyB2ZXJzaW9uIChhbmQsIHRocm91Z2ggaXQsIHRoZSBmdW5jdGlvbiBhbmQgaXRzIElBTSByb2xlKSBvbiBhIGZhaWxlZFxuICAgIC8vIGNyZWF0ZSwgYmxvY2tpbmcgdGhlIG5leHQgZGVwbG95J3MgaW1wb3J0OyBSRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURVxuICAgIC8vIGtlZXBzIHRoZSBkcmFpbi1zYWZlIHJldGFpbiBiZWhhdmlvdXIgd2l0aG91dCB0aGUgb3JwaGFuLlxuICAgIGZvciAoY29uc3QgZm4gb2YgW2lzc3VhbmNlRm4sIHJlZnJlc2hGbiwgbG9nb3V0Rm5dKSB7XG4gICAgICBpZiAoIWZuKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBmbi5jdXJyZW50VmVyc2lvbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjb3JlLkNmblJlc291cmNlO1xuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbi5hcHBseVJlbW92YWxQb2xpY3koY29yZS5SZW1vdmFsUG9saWN5LlJFVEFJTl9PTl9VUERBVEVfT1JfREVMRVRFKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmRwb2ludCBiZWhhdmlvdXJzIHVzZSBhdXRoRW5kcG9pbnRPcmlnaW4gd2hlbiBzdXBwbGllZCAoYSBub24tVlBDIG9yaWdpbixcbiAgICAvLyByZXF1aXJlZCB3aGVuIHRoZSBkZWZhdWx0IGJlaGF2aW91cidzIG9yaWdpbiBpcyBhIFZQQyBvcmlnaW4pLCBlbHNlIHRoZVxuICAgIC8vIGRlZmF1bHQgYmVoYXZpb3VyJ3Mgb3JpZ2luLiBBdHRhY2ggbW9kZSBndWFyYW50ZWVzIGF1dGhFbmRwb2ludE9yaWdpbiBpcyBzZXQuXG4gICAgY29uc3QgZW5kcG9pbnRPcmlnaW46IGNsb3VkZnJvbnQuSU9yaWdpbiA9IHByb3BzLmF1dGhFbmRwb2ludE9yaWdpbiA/PyBwcm9wcy5kZWZhdWx0QmVoYXZpb3IhLm9yaWdpbjtcblxuICAgIC8vIEF1dGggZW5kcG9pbnRzIGFyZSBQT1NULWRyaXZlbjsgQ2xvdWRGcm9udCBvdGhlcndpc2UgZGVmYXVsdHMgdG8gR0VUL0hFQURcbiAgICAvLyBhbmQgcmVqZWN0cyB0aGUgUE9TVCB0aGVzZSBlbmRwb2ludHMgcmVxdWlyZS4gQWxsb3cgYWxsIG1ldGhvZHMgYnkgZGVmYXVsdC5cbiAgICBjb25zdCBhdXRoRW5kcG9pbnRBbGxvd2VkTWV0aG9kcyA9IHByb3BzLmF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzID8/IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMO1xuXG4gICAgY29uc3QgZW5kcG9pbnRPcHRzID0gKGZuOiBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24sIGluY2x1ZGVCb2R5OiBib29sZWFuKTogY2xvdWRmcm9udC5BZGRCZWhhdmlvck9wdGlvbnMgPT4gKHtcbiAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgYWxsb3dlZE1ldGhvZHM6IGF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzLFxuICAgICAgLy8gU2V0LUNvb2tpZSBtdXN0IHJlYWNoIHRoZSB2aWV3ZXIg4oCUIGNhY2hpbmcgZGlzYWJsZWQuXG4gICAgICBjYWNoZVBvbGljeTogY2xvdWRmcm9udC5DYWNoZVBvbGljeS5DQUNISU5HX0RJU0FCTEVELFxuICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogZm4uY3VycmVudFZlcnNpb24sXG4gICAgICAgIC8vIE9yaWdpbi1yZXF1ZXN0LCBub3Qgdmlld2VyLXJlcXVlc3Q6IHRoZSBzZXNzaW9uLWlzc3VhbmNlIGZ1bmN0aW9uIGJ1bmRsZXNcbiAgICAgICAgLy8gUHlKV1QgYW5kIGV4Y2VlZHMgdGhlIDEgTUIgdmlld2VyLXJlcXVlc3QgY29kZSBsaW1pdCwgc28gaXQgbXVzdCBydW4gYXRcbiAgICAgICAgLy8gb3JpZ2luLXJlcXVlc3QgKDUwIE1CIGxpbWl0KS4gT3JpZ2luLXJlcXVlc3QgTGFtYmRhQEVkZ2UgaXMgbm90IHBlcm1pdHRlZFxuICAgICAgICAvLyBvbiBhIFZQQy1vcmlnaW4gYmVoYXZpb3VyLCB3aGljaCBpcyB3aHkgdGhlc2UgZW5kcG9pbnRzIHJ1biBvblxuICAgICAgICAvLyBhdXRoRW5kcG9pbnRPcmlnaW4gKGEgbm9uLVZQQyBvcmlnaW4pIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGJlaGF2aW91cidzXG4gICAgICAgIC8vIG9yaWdpbiDigJQgc2VlIHRoZSBhdXRoRW5kcG9pbnRPcmlnaW4gcHJvcCBkb2MuXG4gICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLk9SSUdJTl9SRVFVRVNULFxuICAgICAgICBpbmNsdWRlQm9keTogaW5jbHVkZUJvZHksXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGlmIChhdHRhY2hNb2RlKSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IHByb3BzLmRpc3RyaWJ1dGlvbiE7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcihzZXNzaW9uSXNzdWFuY2VQYXRoLCBlbmRwb2ludE9yaWdpbiwgZW5kcG9pbnRPcHRzKGlzc3VhbmNlRm4sIHRydWUpKTtcbiAgICAgIGlmIChyZWZyZXNoRm4pIHtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoJy9vYXV0aDIvcmVmcmVzaCcsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMocmVmcmVzaEZuLCBmYWxzZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGxvZ291dEZuKSB7XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvb2F1dGgyL2xvZ291dCcsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMobG9nb3V0Rm4sIHRydWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWRkaXRpb25hbEJlaGF2aW9yczogUmVjb3JkPHN0cmluZywgY2xvdWRmcm9udC5CZWhhdmlvck9wdGlvbnM+ID0ge1xuICAgICAgICBbc2Vzc2lvbklzc3VhbmNlUGF0aF06IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKGlzc3VhbmNlRm4sIHRydWUpIH0sXG4gICAgICB9O1xuICAgICAgaWYgKHJlZnJlc2hGbikge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzWycvb2F1dGgyL3JlZnJlc2gnXSA9IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKHJlZnJlc2hGbiwgZmFsc2UpIH07XG4gICAgICB9XG4gICAgICBpZiAobG9nb3V0Rm4pIHtcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9sb2dvdXQnXSA9IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKGxvZ291dEZuLCB0cnVlKSB9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbih0aGlzLCAnRGlzdHJpYnV0aW9uJywge1xuICAgICAgICBodHRwVmVyc2lvbjogY2xvdWRmcm9udC5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgICAgbWluaW11bVByb3RvY29sVmVyc2lvbjogcHJvcHMubWluaW11bVByb3RvY29sVmVyc2lvbiA/PyBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyNSxcbiAgICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgICAgLi4ucHJvcHMuZGVmYXVsdEJlaGF2aW9yISxcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5tZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgICAgICAgICAgdGhpcy5idWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKHByb3BzLmRlZmF1bHRFeHRlbnNpb25zLCBwcm9wcy5kZWZhdWx0RXh0ZW5zaW9uQ29uZmlnKSxcbiAgICAgICAgICAgIHByb3BzLmRlZmF1bHRCZWhhdmlvciEuZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczogYWRkaXRpb25hbEJlaGF2aW9ycyxcbiAgICAgICAgZG9tYWluTmFtZXM6IHByb3BzLmRvbWFpbk5hbWVzLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2VydGlmaWNhdGUhLFxuICAgICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCA/PyAnaW5kZXguaHRtbCcsXG4gICAgICAgIGVycm9yUmVzcG9uc2VzOiBwcm9wcy5lbmFibGVFcnJvclJlc3BvbnNlcyA/IFtcbiAgICAgICAgICB7IGh0dHBTdGF0dXM6IDQwMywgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLmVycm9yUmVzcG9uc2VQYWdlUGF0aCA/PyAnL2Vycm9yLmh0bWwnLCB0dGw6IGNvcmUuRHVyYXRpb24ubWludXRlcyg1KSB9LFxuICAgICAgICAgIHsgaHR0cFN0YXR1czogNDA0LCByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCwgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsIHR0bDogY29yZS5EdXJhdGlvbi5taW51dGVzKDUpIH0sXG4gICAgICAgIF0gOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBiZWhhdmlvdXIuIFBhc3MgYG9wdGlvbnMuZXh0ZW5zaW9ucyA9IFtFeHRlbnNpb24uUkVRVUlSRV9BVVRIXWAgdG9cbiAgICogcHJvdGVjdCB0aGUgcGF0aCAodW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzIHJlZGlyZWN0IHRvIHRoZSBsb2dpbiBwYWdlIGFuZFxuICAgKiB2YWxpZGF0ZWQgaWRlbnRpdHkgY2xhaW1zIGFyZSBpbmplY3RlZCBhcyBvcmlnaW4gaGVhZGVycykuXG4gICAqL1xuICBwdWJsaWMgYWRkQmVoYXZpb3IoXG4gICAgcGF0aFBhdHRlcm46IHN0cmluZyxcbiAgICBvcmlnaW46IGNsb3VkZnJvbnQuSU9yaWdpbixcbiAgICBvcHRpb25zOiBBZGRCZWhhdmlvck9wdGlvbnM8VFJvbGU+ID0ge30sXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKHBhdGhQYXR0ZXJuLCBvcmlnaW4sIHtcbiAgICAgIC4uLm9wdGlvbnMuYmVoYXZpb3JPcHRpb25zLFxuICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHRoaXMubWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICAgICAgdGhpcy5idWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKG9wdGlvbnMuZXh0ZW5zaW9ucywgb3B0aW9ucy5leHRlbnNpb25Db25maWcpLFxuICAgICAgICBvcHRpb25zLmJlaGF2aW9yT3B0aW9ucz8uZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHR3byBzZXRzIG9mIGZ1bmN0aW9uIGFzc29jaWF0aW9ucywgZW5mb3JjaW5nIENsb3VkRnJvbnQncyBydWxlIG9mIG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLiBUaGUgbGlicmFyeSBuZXZlciBjb21wb3NlcyBvciBpbnNwZWN0c1xuICAgKiBhIGNvbnN1bWVyJ3MgZnVuY3Rpb24g4oCUIGl0IG9ubHkgYXR0YWNoZXMgaXQ7IGNvbWJpbmluZyB0d28gZnVuY3Rpb25zIG9uIHRoZVxuICAgKiBzYW1lIGV2ZW50IHR5cGUgaXMgdGhlIGNvbnN1bWVyJ3MgcmVzcG9uc2liaWxpdHkgKGEgc2luZ2xlIGZ1bmN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgbWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBhdXRoPzogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10sXG4gICAgY29uc3VtZXI/OiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSxcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFsbCA9IFsuLi4oYXV0aCA/PyBbXSksIC4uLihjb25zdW1lciA/PyBbXSldO1xuICAgIGlmIChhbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxjbG91ZGZyb250LkZ1bmN0aW9uRXZlbnRUeXBlPigpO1xuICAgIGZvciAoY29uc3QgZmEgb2YgYWxsKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoZmEuZXZlbnRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsb3VkRnJvbnQgYWxsb3dzIG9ubHkgb25lIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIsIGJ1dCB0d28gJyR7ZmEuZXZlbnRUeXBlfScgYCArXG4gICAgICAgICAgJ2Z1bmN0aW9ucyB3ZXJlIHN1cHBsaWVkIChlLmcuIFJFUVVJUkVfQVVUSCBwbHVzIHlvdXIgb3duIGZ1bmN0aW9uKS4gS2VlcCBhdXRoIGFuZCB5b3VyIG90aGVyICcgK1xuICAgICAgICAgICdmdW5jdGlvbiBvbiBzZXBhcmF0ZSBwYXRoIGJlaGF2aW91cnMsIG9yIGNvbWJpbmUgdGhlbSBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIHlvdXJzZWxmLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChmYS5ldmVudFR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFBST1RFQ1RFRCBiZWhhdmlvdXI6IHVuYXV0aGVudGljYXRlZCByZXF1ZXN0cyByZWRpcmVjdCB0byB0aGUgbG9naW5cbiAgICogcGFnZSBhbmQgdmFsaWRhdGVkIGlkZW50aXR5IGNsYWltcyBhcmUgaW5qZWN0ZWQgYXMgb3JpZ2luIGhlYWRlcnMuXG4gICAqIENvbnZlbmllbmNlIHdyYXBwZXIgb3ZlciB7QGxpbmsgYWRkQmVoYXZpb3J9IHRoYXQgZW5zdXJlcyBSRVFVSVJFX0FVVEguXG4gICAqL1xuICBwdWJsaWMgcHJvdGVjdChcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luLFxuICAgIG9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT4gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IG9wdGlvbnMuZXh0ZW5zaW9ucyA/IFsuLi5vcHRpb25zLmV4dGVuc2lvbnNdIDogW107XG4gICAgaWYgKCFleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVFVSVJFX0FVVEgpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCk7XG4gICAgfVxuICAgIHRoaXMuYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwgeyAuLi5vcHRpb25zLCBleHRlbnNpb25zOiBleHRlbnNpb25zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NlZCB2aWV3ZXItcmVxdWVzdCBhdXRoLWNoZWNrIGZ1bmN0aW9uIChSRVFVSVJFX0FVVEgpLiBVc2VmdWwgaW5cbiAgICogQVRUQUNIIE1PREUgdG8gYXNzb2NpYXRlIG9yIGNvbXBvc2UgYXV0aCBvbnRvIGEgYmVoYXZpb3VyIHRoaXMgY29uc3RydWN0IGRvZXNcbiAgICogbm90IG93biDigJQgZS5nLiBhbiBleGlzdGluZyBkZWZhdWx0IGJlaGF2aW91ciwgdmlhIGFuIEwxIG92ZXJyaWRlLlxuICAgKi9cbiAgcHVibGljIGdldCBhdXRoRnVuY3Rpb24oKTogY2xvdWRmcm9udC5GdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9zZWRBdXRoRnVuY3Rpb24oW0V4dGVuc2lvbi5SRVFVSVJFX0FVVEhdKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBleHRlbnNpb25zPzogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghZXh0ZW5zaW9ucyB8fCBleHRlbnNpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIFt7IGZ1bmN0aW9uOiB0aGlzLmNvbXBvc2VkQXV0aEZ1bmN0aW9uKGV4dGVuc2lvbnMsIGNvbmZpZyksIGV2ZW50VHlwZTogY2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCB9XTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZWRBdXRoRnVuY3Rpb24oXG4gICAgZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmZ1bmN0aW9uQ2FjaGVLZXkoZXh0ZW5zaW9ucywgY29uZmlnKTtcbiAgICBsZXQgZnVuYyA9IHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIWZ1bmMpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmNvbXBvc2VyLmNvbXBvc2UoZXh0ZW5zaW9ucywgY29uZmlnLCB7XG4gICAgICAgIGxvZ2luUmVkaXJlY3RQYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgICBlbmFibGVIZWFkZXJJbmplY3Rpb246IHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uLFxuICAgICAgICBoZWFkZXJJbmplY3Rpb25DbGFpbXM6IHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zLFxuICAgICAgICBlbmFibGVSZWZyZXNoOiB0aGlzLmVuYWJsZVJlZnJlc2gsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSBgQ29tcG9zZWRGbiR7ZXh0ZW5zaW9ucy5tYXAoZSA9PiBlLnJlcGxhY2UoJ1JFUVVJUkVfJywgJycpKS5qb2luKCcnKX0ke3RoaXMuY29tcG9zZWRGdW5jdGlvbnMuc2l6ZX1gO1xuICAgICAgY29uc3QgbmVlZHNLdnMgPSBleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVFVSVJFX0FVVEgpO1xuICAgICAgZnVuYyA9IG5ldyBjbG91ZGZyb250LkZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uSWQsIG5lZWRzS3ZzXG4gICAgICAgID8geyBjb2RlOiBjbG91ZGZyb250LkZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGNvZGUpLCBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsIGNvbW1lbnQ6IGBDdXN0b20tVUk6ICR7ZXh0ZW5zaW9ucy5qb2luKCcsICcpfWAsIGtleVZhbHVlU3RvcmU6IHRoaXMua3ZzIH1cbiAgICAgICAgOiB7IGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoY29kZSksIHJ1bnRpbWU6IGNsb3VkZnJvbnQuRnVuY3Rpb25SdW50aW1lLkpTXzJfMCwgY29tbWVudDogYEN1c3RvbS1VSTogJHtleHRlbnNpb25zLmpvaW4oJywgJyl9YCB9KTtcbiAgICAgIGlmICh0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24pIHtcbiAgICAgICAgZnVuYy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbiA9IGZ1bmM7XG4gICAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zLnNldChjYWNoZUtleSwgZnVuYyk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jO1xuICB9XG5cbiAgcHJpdmF0ZSBmdW5jdGlvbkNhY2hlS2V5KGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdLCBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtleHRlbnNpb25zLnNsaWNlKCkuc29ydCgpLmpvaW4oJywnKV07XG4gICAgaWYgKGNvbmZpZz8ucmVxdWlyZWRSb2xlcykge1xuICAgICAgcGFydHMucHVzaChjb25maWcucmVxdWlyZWRSb2xlcy5zbGljZSgpLnNvcnQoKS5qb2luKCcsJykpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy5yb2xlTWF0Y2hNb2RlICYmIGNvbmZpZy5yb2xlTWF0Y2hNb2RlICE9PSBSb2xlTWF0Y2hNb2RlLk9SKSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbmZpZy5yb2xlTWF0Y2hNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29uZmlnUHkoXG4gICAgYmFzZVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBleHRyYVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBzdGF0aWNPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdpbXBvcnQganNvbicsXG4gICAgICAnaW1wb3J0IGxvZ2dpbmcnLFxuICAgICAgJ2ltcG9ydCBib3RvMycsXG4gICAgICAnJyxcbiAgICAgICdsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpJyxcbiAgICAgIGBCQVNFX1NFQ1JFVF9OQU1FID0gJHtKU09OLnN0cmluZ2lmeShiYXNlU2VjcmV0TmFtZSl9YCxcbiAgICAgIGBFWFRSQV9TRUNSRVRfTkFNRSA9ICR7SlNPTi5zdHJpbmdpZnkoZXh0cmFTZWNyZXROYW1lKX1gLFxuICAgICAgYENPTkZJR19SRUdJT04gPSAke0pTT04uc3RyaW5naWZ5KHJlZ2lvbil9YCxcbiAgICAgIGBTVEFUSUNfT1ZFUlJJREVTID0gJHtKU09OLnN0cmluZ2lmeShzdGF0aWNPdmVycmlkZXMpfWAsXG4gICAgICAnJyxcbiAgICAgICdfc20gPSBOb25lJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnZGVmIF9jbGllbnQoKTonLFxuICAgICAgJyAgICBnbG9iYWwgX3NtJyxcbiAgICAgICcgICAgaWYgX3NtIGlzIE5vbmU6JyxcbiAgICAgICcgICAgICAgIF9zbSA9IGJvdG8zLmNsaWVudChcInNlY3JldHNtYW5hZ2VyXCIsIHJlZ2lvbl9uYW1lPUNPTkZJR19SRUdJT04pJyxcbiAgICAgICcgICAgcmV0dXJuIF9zbScsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJ2RlZiBnZXRfY29uZmlnKCk6JyxcbiAgICAgICcgICAgY2ZnID0ganNvbi5sb2FkcyhfY2xpZW50KCkuZ2V0X3NlY3JldF92YWx1ZShTZWNyZXRJZD1CQVNFX1NFQ1JFVF9OQU1FKVtcIlNlY3JldFN0cmluZ1wiXSknLFxuICAgICAgJyAgICB0cnk6JyxcbiAgICAgICcgICAgICAgIGNmZy51cGRhdGUoanNvbi5sb2FkcyhfY2xpZW50KCkuZ2V0X3NlY3JldF92YWx1ZShTZWNyZXRJZD1FWFRSQV9TRUNSRVRfTkFNRSlbXCJTZWNyZXRTdHJpbmdcIl0pKScsXG4gICAgICAnICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTonLFxuICAgICAgJyAgICAgICAgbG9nZ2VyLmVycm9yKFwiZXh0cmEgY29uZmlnIGxvYWQgZmFpbGVkOiAlc1wiLCBlKScsXG4gICAgICAnICAgIGNmZy51cGRhdGUoU1RBVElDX09WRVJSSURFUyknLFxuICAgICAgJyAgICByZXR1cm4gY2ZnJyxcbiAgICAgICcnLFxuICAgIF0uam9pbignXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIG1ha2VFZGdlRnVuY3Rpb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzb3VyY2VEaXJOYW1lOiBzdHJpbmcsXG4gICAgY29uZmlnUHk6IHN0cmluZyxcbiAgICByb2xlOiBpYW0uSVJvbGUsXG4gICAgcmV1c2VDb2duaXRvQnVuZGxlOiBib29sZWFuLFxuICApOiBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24ge1xuICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEnLCBzb3VyY2VEaXJOYW1lKTtcbiAgICBjb25zdCBidW5kbGVkRGVwc0RpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEtYnVuZGxlZC9jb2duaXRvLWF1dGgnKTtcbiAgICBjb25zdCB0ZW1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY3VzdG9tdWktYXV0aC0nKSk7XG4gICAgY29uc3QgY29uZmlnUHlQYXRoID0gcGF0aC5qb2luKHRlbXBEaXIsICdjb25maWdfZ2VuZXJhdGVkLnB5Jyk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhjb25maWdQeVBhdGgsIGNvbmZpZ1B5KTtcblxuICAgIHJldHVybiBuZXcgY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5sYW1iZGFfaGFuZGxlcicsXG4gICAgICB0aW1lb3V0OiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgcm9sZTogcm9sZSxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChzb3VyY2VEaXIsIHtcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBsb2NhbDoge1xuICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgIGlmIChyZXVzZUNvZ25pdG9CdW5kbGUgJiYgZnMuZXhpc3RzU3luYyhidW5kbGVkRGVwc0RpcikpIHtcbiAgICAgICAgICAgICAgICBmcy5jcFN5bmMoYnVuZGxlZERlcHNEaXIsIG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZzLnJlYWRkaXJTeW5jKHNvdXJjZURpcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZSA9PT0gJ3JlcXVpcmVtZW50cy50eHQnKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBmcy5jcFN5bmMocGF0aC5qb2luKHNvdXJjZURpciwgZmlsZSksIHBhdGguam9pbihvdXRwdXREaXIsIGZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXRwdXREaXIsICdjb25maWdfZ2VuZXJhdGVkLnB5JyksIGNvbmZpZ1B5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW1hZ2U6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLmJ1bmRsaW5nSW1hZ2UsXG4gICAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICAgJ2Jhc2gnLCAnLWMnLFxuICAgICAgICAgICAgJ3BpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQgLXQgL2Fzc2V0LW91dHB1dCAmJiBjcCAtciAuIC9hc3NldC1vdXRwdXQgJiYgY3AgL3RtcC9jb25maWdfZ2VuZXJhdGVkLnB5IC9hc3NldC1vdXRwdXQvY29uZmlnX2dlbmVyYXRlZC5weScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICB2b2x1bWVzOiBbeyBob3N0UGF0aDogY29uZmlnUHlQYXRoLCBjb250YWluZXJQYXRoOiAnL3RtcC9jb25maWdfZ2VuZXJhdGVkLnB5JyB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|