SIP Trunk And Congestion Handling

Home » Asterisk Users » SIP Trunk And Congestion Handling
Asterisk Users 6 Comments

B.H.

Hello, all. We have a dialer software that runs outgoing telephony campaigns. We have been using it successfully with PRI cards, now we’re evaluating it’s use also with a SIP trunk. Most of the things run perfectly good without a need to change anything except for dial string, but there’s some strange problem with asterisk interpreting SIP result codes.

Our software is written in Java using asterisk-java library. It is using Asterisk’s reason code from OriginateResponseEvent to determine if it should redial the number. Our consideration is that if Asterisk returns reason code 8 (Congestion) this means that the call has never actually reached the destination number, and it’s OK to try to redial again.

But with SIP trunk, many times i can see a really strange sequence of events:

After INVITE i get the following responses (example from a real conversation)
[17:01:40] SIP/2.0 100 Trying
[17:01:40] SIP/2.0 183 Session Progress
[17:01:51] SIP/2.0 480 Temporarily not available

As far as i understand, this means that the remote phone was ringing for 10
seconds and then the call failed due to a timeout. As far as i understand, i’m supposed to get reason code 3, but actually the java application gets OriginateResponseEvent with failure reason code 8.

This behavior is hard to reproduce. I was trying with my own phone number and then i get the expected reason code 3, but i constantly get this situation running our customer’s campaigns.

6 thoughts on - SIP Trunk And Congestion Handling

  • V2hpY2ggdmVyc2lvbiBvZiBhc3RlcmlzayBhcmUgeW91IHVzaW5nID8NCg0KDQpGcm9tOiBhc3Rl cmlzay11c2Vycy1ib3VuY2VzQGxpc3RzLmRpZ2l1bS5jb20gW21haWx0bzphc3Rlcmlzay11c2Vy cy1ib3VuY2VzQGxpc3RzLmRpZ2l1bS5jb21dIE9uIEJlaGFsZiBPZiBNb3JkZWNoYXkgS2FnYW5l cg0KU2VudDogU3VuZGF5LCBBdWd1c3QgMTEsIDIwMTMgODo1OSBBTQ0KVG86IEFzdGVyaXNrIFVz ZXJzIE1haWxpbmcgTGlzdCAtIE5vbi1Db21tZXJjaWFsIERpc2N1c3Npb24NClN1YmplY3Q6IFth c3Rlcmlzay11c2Vyc10gU0lQIHRydW5rIGFuZCBjb25nZXN0aW9uIGhhbmRsaW5nDQoNCkIuSC4N
    Cg0KSGVsbG8sIGFsbC4gV2UgaGF2ZSBhIGRpYWxlciBzb2Z0d2FyZSB0aGF0IHJ1bnMgb3V0Z29p bmcgdGVsZXBob255IGNhbXBhaWducy4gV2UgaGF2ZSBiZWVuIHVzaW5nIGl0IHN1Y2Nlc3NmdWxs eSB3aXRoIFBSSSBjYXJkcywgbm93IHdlJ3JlIGV2YWx1YXRpbmcgaXQncyB1c2UgYWxzbyB3aXRo IGEgU0lQIHRydW5rLiBNb3N0IG9mIHRoZSB0aGluZ3MgcnVuIHBlcmZlY3RseSBnb29kIHdpdGhv dXQgYSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBleGNlcHQgZm9yIGRpYWwgc3RyaW5nLCBidXQg dGhlcmUncyBzb21lIHN0cmFuZ2UgcHJvYmxlbSB3aXRoIGFzdGVyaXNrIGludGVycHJldGluZyBT
    SVAgcmVzdWx0IGNvZGVzLg0KDQpPdXIgc29mdHdhcmUgaXMgd3JpdHRlbiBpbiBKYXZhIHVzaW5n IGFzdGVyaXNrLWphdmEgbGlicmFyeS4gSXQgaXMgdXNpbmcgQXN0ZXJpc2sncyByZWFzb24gY29k ZSBmcm9tIE9yaWdpbmF0ZVJlc3BvbnNlRXZlbnQgdG8gZGV0ZXJtaW5lIGlmIGl0IHNob3VsZCBy ZWRpYWwgdGhlIG51bWJlci4gT3VyIGNvbnNpZGVyYXRpb24gaXMgdGhhdCBpZiBBc3RlcmlzayBy ZXR1cm5zIHJlYXNvbiBjb2RlIDggKENvbmdlc3Rpb24pIHRoaXMgbWVhbnMgdGhhdCB0aGUgY2Fs bCBoYXMgbmV2ZXIgYWN0dWFsbHkgcmVhY2hlZCB0aGUgZGVzdGluYXRpb24gbnVtYmVyLCBhbmQg aXQncyBPSyB0byB0cnkgdG8gcmVkaWFsIGFnYWluLg0KDQpCdXQgd2l0aCBTSVAgdHJ1bmssIG1h bnkgdGltZXMgaSBjYW4gc2VlIGEgcmVhbGx5IHN0cmFuZ2Ugc2VxdWVuY2Ugb2YgZXZlbnRzOg0K
    DQpBZnRlciBJTlZJVEUgaSBnZXQgdGhlIGZvbGxvd2luZyByZXNwb25zZXMgKGV4YW1wbGUgZnJv bSBhIHJlYWwgY29udmVyc2F0aW9uKQ0KWzE3OjAxOjQwXSBTSVAvMi4wIDEwMCBUcnlpbmcNClsx NzowMTo0MF0gU0lQLzIuMCAxODMgU2Vzc2lvbiBQcm9ncmVzcw0KWzE3OjAxOjUxXSBTSVAvMi4w IDQ4MCBUZW1wb3JhcmlseSBub3QgYXZhaWxhYmxlDQoNCkFzIGZhciBhcyBpIHVuZGVyc3RhbmQs IHRoaXMgbWVhbnMgdGhhdCB0aGUgcmVtb3RlIHBob25lIHdhcyByaW5naW5nIGZvciAxMCBzZWNv bmRzIGFuZCB0aGVuIHRoZSBjYWxsIGZhaWxlZCBkdWUgdG8gYSB0aW1lb3V0LiBBcyBmYXIgYXMg aSB1bmRlcnN0YW5kLCBpJ20gc3VwcG9zZWQgdG8gZ2V0IHJlYXNvbiBjb2RlIDMsIGJ1dCBhY3R1
    YWxseSB0aGUgamF2YSBhcHBsaWNhdGlvbiBnZXRzIE9yaWdpbmF0ZVJlc3BvbnNlRXZlbnQgd2l0
    aCBmYWlsdXJlIHJlYXNvbiBjb2RlIDguDQoNClRoaXMgYmVoYXZpb3IgaXMgaGFyZCB0byByZXBy b2R1Y2UuIEkgd2FzIHRyeWluZyB3aXRoIG15IG93biBwaG9uZSBudW1iZXIgYW5kIHRoZW4gaSBn ZXQgdGhlIGV4cGVjdGVkIHJlYXNvbiBjb2RlIDMsIGJ1dCBpIGNvbnN0YW50bHkgZ2V0IHRoaXMg c2l0dWF0aW9uIHJ1bm5pbmcgb3VyIGN1c3RvbWVyJ3MgY2FtcGFpZ25zLg0KDQoNCi0tDQrXntep
    15nXlyBOT1chDQpNb3NoaWFjaCBpcyBjb21pbmcgdmVyeSBzb29uLCBwcmVwYXJlIHlvdXJzZWxm IQ0K15nXl9eZINeQ15PXldeg16DXlSDXnteV16jXmdeg15Ug15XXqNeR15nXoNeVINee15zXmiDX
    lNee16nXmdeXINec16LXldec150g15XXoteTIQ0K

  • MjEuMS41PGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMyNjEjc2VjdGlvbi0yMS4xLjU+
    IDE4MyBTZXNzaW9uIFByb2dyZXNzDQoNCg0KICAgVGhlIDE4MyAoU2Vzc2lvbiBQcm9ncmVzcykg cmVzcG9uc2UgaXMgdXNlZCB0byBjb252ZXkgaW5mb3JtYXRpb24NCiAgIGFib3V0IHRoZSBwcm9n cmVzcyBvZiB0aGUgY2FsbCB0aGF0IGlzIG5vdCBvdGhlcndpc2UgY2xhc3NpZmllZC4gIFRoZQ0K
    ICAgUmVhc29uLVBocmFzZSwgaGVhZGVyIGZpZWxkcywgb3IgbWVzc2FnZSBib2R5IE1BWSBiZSB1
    c2VkIHRvIGNvbnZleQ0KICAgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjYWxsIHByb2dyZXNzLg0K
    DQoyMS4xLjI8aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzI2MSNzZWN0aW9uLTIxLjEu Mj4gMTgwIFJpbmdpbmcNCg0KDQoNCg0KDQogICBUaGUgVUEgcmVjZWl2aW5nIHRoZSBJTlZJVEUg aXMgdHJ5aW5nIHRvIGFsZXJ0IHRoZSB1c2VyLiAgVGhpcw0KDQogICByZXNwb25zZSBNQVkgYmUg dXNlZCB0byBpbml0aWF0ZSBsb2NhbCByaW5nYmFjay4NCg0KaHR0cDovL3Rvb2xzLmlldGYub3Jn L2h0bWwvcmZjMzI2MSNzZWN0aW9uLTIxLjEuMg0KDQpGcm9tOiBhc3Rlcmlzay11c2Vycy1ib3Vu Y2VzQGxpc3RzLmRpZ2l1bS5jb20gW21haWx0bzphc3Rlcmlzay11c2Vycy1ib3VuY2VzQGxpc3Rz LmRpZ2l1bS5jb21dIE9uIEJlaGFsZiBPZiBNb3JkZWNoYXkgS2FnYW5lcg0KU2VudDogVHVlc2Rh eSwgQXVndXN0IDEzLCAyMDEzIDEwOjU1IEFNDQpUbzogQXN0ZXJpc2sgVXNlcnMgTWFpbGluZyBM
    aXN0IC0gTm9uLUNvbW1lcmNpYWwgRGlzY3Vzc2lvbg0KU3ViamVjdDogUmU6IFthc3Rlcmlzay11
    c2Vyc10gU0lQIHRydW5rIGFuZCBjb25nZXN0aW9uIGhhbmRsaW5nDQoNCg0KQi5ILg0KDQpBc3Rl cmlzayAxLjguMjINCg0KVGhhbmtzDQpPbiBBdWcgMTIsIDIwMTMgODowNSBQTSwgIlNoaXNoaXIg UG9raGFyZWwiIDxTaGlzaGlyLlBva2hhcmVsQG9uMjQuY29tPG1haWx0bzpTaGlzaGlyLlBva2hh cmVsQG9uMjQuY29tPj4gd3JvdGU6DQpXaGljaCB2ZXJzaW9uIG9mIGFzdGVyaXNrIGFyZSB5b3Ug dXNpbmcgPw0KDQoNCkZyb206IGFzdGVyaXNrLXVzZXJzLWJvdW5jZXNAbGlzdHMuZGlnaXVtLmNv bTxtYWlsdG86YXN0ZXJpc2stdXNlcnMtYm91bmNlc0BsaXN0cy5kaWdpdW0uY29tPiBbbWFpbHRv OmFzdGVyaXNrLXVzZXJzLWJvdW5jZXNAbGlzdHMuZGlnaXVtLmNvbTxtYWlsdG86YXN0ZXJpc2st dXNlcnMtYm91bmNlc0BsaXN0cy5kaWdpdW0uY29tPl0gT24gQmVoYWxmIE9mIE1vcmRlY2hheSBL
    YWdhbmVyDQpTZW50OiBTdW5kYXksIEF1Z3VzdCAxMSwgMjAxMyA4OjU5IEFNDQpUbzogQXN0ZXJp c2sgVXNlcnMgTWFpbGluZyBMaXN0IC0gTm9uLUNvbW1lcmNpYWwgRGlzY3Vzc2lvbg0KU3ViamVj dDogW2FzdGVyaXNrLXVzZXJzXSBTSVAgdHJ1bmsgYW5kIGNvbmdlc3Rpb24gaGFuZGxpbmcNCg0K
    Qi5ILg0KDQpIZWxsbywgYWxsLiBXZSBoYXZlIGEgZGlhbGVyIHNvZnR3YXJlIHRoYXQgcnVucyBv dXRnb2luZyB0ZWxlcGhvbnkgY2FtcGFpZ25zLiBXZSBoYXZlIGJlZW4gdXNpbmcgaXQgc3VjY2Vz c2Z1bGx5IHdpdGggUFJJIGNhcmRzLCBub3cgd2UncmUgZXZhbHVhdGluZyBpdCdzIHVzZSBhbHNv IHdpdGggYSBTSVAgdHJ1bmsuIE1vc3Qgb2YgdGhlIHRoaW5ncyBydW4gcGVyZmVjdGx5IGdvb2Qg d2l0aG91dCBhIG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIGV4Y2VwdCBmb3IgZGlhbCBzdHJpbmcs IGJ1dCB0aGVyZSdzIHNvbWUgc3RyYW5nZSBwcm9ibGVtIHdpdGggYXN0ZXJpc2sgaW50ZXJwcmV0
    aW5nIFNJUCByZXN1bHQgY29kZXMuDQoNCk91ciBzb2Z0d2FyZSBpcyB3cml0dGVuIGluIEphdmEg dXNpbmcgYXN0ZXJpc2stamF2YSBsaWJyYXJ5LiBJdCBpcyB1c2luZyBBc3RlcmlzaydzIHJlYXNv biBjb2RlIGZyb20gT3JpZ2luYXRlUmVzcG9uc2VFdmVudCB0byBkZXRlcm1pbmUgaWYgaXQgc2hv dWxkIHJlZGlhbCB0aGUgbnVtYmVyLiBPdXIgY29uc2lkZXJhdGlvbiBpcyB0aGF0IGlmIEFzdGVy aXNrIHJldHVybnMgcmVhc29uIGNvZGUgOCAoQ29uZ2VzdGlvbikgdGhpcyBtZWFucyB0aGF0IHRo ZSBjYWxsIGhhcyBuZXZlciBhY3R1YWxseSByZWFjaGVkIHRoZSBkZXN0aW5hdGlvbiBudW1iZXIs IGFuZCBpdCdzIE9LIHRvIHRyeSB0byByZWRpYWwgYWdhaW4uDQoNCkJ1dCB3aXRoIFNJUCB0cnVu aywgbWFueSB0aW1lcyBpIGNhbiBzZWUgYSByZWFsbHkgc3RyYW5nZSBzZXF1ZW5jZSBvZiBldmVu dHM6DQoNCkFmdGVyIElOVklURSBpIGdldCB0aGUgZm9sbG93aW5nIHJlc3BvbnNlcyAoZXhhbXBs ZSBmcm9tIGEgcmVhbCBjb252ZXJzYXRpb24pDQpbMTc6MDE6NDBdIFNJUC8yLjAgMTAwIFRyeWlu Zw0KWzE3OjAxOjQwXSBTSVAvMi4wIDE4MyBTZXNzaW9uIFByb2dyZXNzDQpbMTc6MDE6NTFdIFNJ
    UC8yLjAgNDgwIFRlbXBvcmFyaWx5IG5vdCBhdmFpbGFibGUNCg0KQXMgZmFyIGFzIGkgdW5kZXJz dGFuZCwgdGhpcyBtZWFucyB0aGF0IHRoZSByZW1vdGUgcGhvbmUgd2FzIHJpbmdpbmcgZm9yIDEw IHNlY29uZHMgYW5kIHRoZW4gdGhlIGNhbGwgZmFpbGVkIGR1ZSB0byBhIHRpbWVvdXQuIEFzIGZh ciBhcyBpIHVuZGVyc3RhbmQsIGknbSBzdXBwb3NlZCB0byBnZXQgcmVhc29uIGNvZGUgMywgYnV0
    IGFjdHVhbGx5IHRoZSBqYXZhIGFwcGxpY2F0aW9uIGdldHMgT3JpZ2luYXRlUmVzcG9uc2VFdmVu dCB3aXRoIGZhaWx1cmUgcmVhc29uIGNvZGUgOC4NCg0KVGhpcyBiZWhhdmlvciBpcyBoYXJkIHRv IHJlcHJvZHVjZS4gSSB3YXMgdHJ5aW5nIHdpdGggbXkgb3duIHBob25lIG51bWJlciBhbmQgdGhl biBpIGdldCB0aGUgZXhwZWN0ZWQgcmVhc29uIGNvZGUgMywgYnV0IGkgY29uc3RhbnRseSBnZXQg dGhpcyBzaXR1YXRpb24gcnVubmluZyBvdXIgY3VzdG9tZXIncyBjYW1wYWlnbnMuDQoNCg0KLS0N
    Ctee16nXmdeXIE5PVyENCk1vc2hpYWNoIGlzIGNvbWluZyB2ZXJ5IHNvb24sIHByZXBhcmUgeW91
    cnNlbGYhDQrXmdeX15kg15DXk9eV16DXoNeVINee15XXqNeZ16DXlSDXldeo15HXmdeg15Ug157X
    nNeaINeU157XqdeZ15cg15zXoteV15zXnSDXldei15MhDQoNCi0tDQpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCi0t IEJhbmR3aWR0aCBhbmQgQ29sb2NhdGlvbiBQcm92aWRlZCBieSBodHRwOi8vd3d3LmFwaS1kaWdp dGFsLmNvbSAtLQ0KTmV3IHRvIEFzdGVyaXNrPyBKb2luIHVzIGZvciBhIGxpdmUgaW50cm9kdWN0
    b3J5IHdlYmluYXIgZXZlcnkgVGh1cnM6DQogICAgICAgICAgICAgICBodHRwOi8vd3d3LmFzdGVy aXNrLm9yZy9oZWxsbw0KDQphc3Rlcmlzay11c2VycyBtYWlsaW5nIGxpc3QNClRvIFVOU1VCU0NS
    SUJFIG9yIHVwZGF0ZSBvcHRpb25zIHZpc2l0Og0KICAgaHR0cDovL2xpc3RzLmRpZ2l1bS5jb20v bWFpbG1hbi9saXN0aW5mby9hc3Rlcmlzay11c2Vycw0K

  • B.H.

    But if the final response is 480 doesn’t it mean that the call was placed but there was no reply?

  • B.H.

    While dialing out i get a lot of AMI responses like this:

    Event: Hangup Privilege: call,all Channel: SIP/TRK012-000336b0
    Uniqueid: S5-1376567634.218719
    CallerIDNum: XXXXXXXXX
    CallerIDName: YYYYYYYYYY
    ConnectedLineNum: XXXXXXXXX
    ConnectedLineName: YYYYYYYYYY
    *Cause: 19*
    *Cause-txt: User alerting, no answer*

    Event: OriginateResponse Privilege: call,all ActionID: 249867518_255525#YD_UFOzWQx30Wm6PM3USxGE
    Response: Failure Channel: SIP/TRK012/YYYYYYYYYY
    Context: YemotDialer_Bridge Exten: s
    *Reason: 8*
    Uniqueid:
    CallerIDNum: XXXXXXXXX
    CallerIDName: YYYYYYYYYY

    As mentioned in the previous mails, SIP response code is 480. I would expect to get reason 3 not 8. Reason 8 is confusing my dialer software so it wants to redial the number.

    I use Asterisk 1.8.22. Is this a bug in asterisk or is a problem with my SIP trunk provider?

  • WW91IGdvdCB0byBzZXQgZXZlbnQgb2ZmIHdoaWxlIGNvbm5lY3RpbmcgdG8gQU1JIHRvIGdldCBy aWQgb2YgQU1JIHJlc3BvbnNlcyBvbiBlYWNoIGV2ZW50LiBUaGVyZSBhcmUgd2F5cyB5b3UgY2Fu IHN1cHByZXNzIHRoZSBldmVudHMNCg0KaHR0cDovL3d3dy52b2lwLWluZm8ub3JnL3dpa2kvdmll dy9Bc3RlcmlzayttYW5hZ2VyK0FQSQ0KDQoNCkFzayB5b3VyIHByb3ZpZGVyIHRvIHNlbmQgMTgw IGluc3RlYWQgb2YgMTgzLg0KDQoNCkZyb206IGFzdGVyaXNrLXVzZXJzLWJvdW5jZXNAbGlzdHMu ZGlnaXVtLmNvbSBbbWFpbHRvOmFzdGVyaXNrLXVzZXJzLWJvdW5jZXNAbGlzdHMuZGlnaXVtLmNv bV0gT24gQmVoYWxmIE9mIE1vcmRlY2hheSBLYWdhbmVyDQpTZW50OiBUaHVyc2RheSwgQXVndXN0
    IDE1LCAyMDEzIDU6MTEgQU0NClRvOiBBc3RlcmlzayBVc2VycyBNYWlsaW5nIExpc3QgLSBOb24t Q29tbWVyY2lhbCBEaXNjdXNzaW9uDQpTdWJqZWN0OiBSZTogW2FzdGVyaXNrLXVzZXJzXSBTSVAg dHJ1bmsgYW5kIGNvbmdlc3Rpb24gaGFuZGxpbmcNCg0KQi5ILg0KDQpXaGlsZSBkaWFsaW5nIG91
    dCBpIGdldCBhIGxvdCBvZiBBTUkgcmVzcG9uc2VzIGxpa2UgdGhpczoNCg0KRXZlbnQ6IEhhbmd1
    cA0KUHJpdmlsZWdlOiBjYWxsLGFsbA0KQ2hhbm5lbDogU0lQL1RSSzAxMi0wMDAzMzZiMA0KVW5p cXVlaWQ6IFM1LTEzNzY1Njc2MzQuMjE4NzE5DQpDYWxsZXJJRE51bTogWFhYWFhYWFhYDQpDYWxs ZXJJRE5hbWU6IFlZWVlZWVlZWVkNCkNvbm5lY3RlZExpbmVOdW06IFhYWFhYWFhYWA0KQ29ubmVj dGVkTGluZU5hbWU6IFlZWVlZWVlZWVkNCkNhdXNlOiAxOQ0KQ2F1c2UtdHh0OiBVc2VyIGFsZXJ0
    aW5nLCBubyBhbnN3ZXINCg0KRXZlbnQ6IE9yaWdpbmF0ZVJlc3BvbnNlDQpQcml2aWxlZ2U6IGNh bGwsYWxsDQpBY3Rpb25JRDogMjQ5ODY3NTE4XzI1NTUyNSNZRF9VRk96V1F4MzBXbTZQTTNVU3hH
    RQ0KUmVzcG9uc2U6IEZhaWx1cmUNCkNoYW5uZWw6IFNJUC9UUkswMTIvWVlZWVlZWVlZWQ0KQ29u dGV4dDogWWVtb3REaWFsZXJfQnJpZGdlDQpFeHRlbjogcw0KUmVhc29uOiA4DQpVbmlxdWVpZDog PG51bGw+DQpDYWxsZXJJRE51bTogWFhYWFhYWFhYDQpDYWxsZXJJRE5hbWU6IFlZWVlZWVlZWVkN
    Cg0KQXMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtYWlscywgU0lQIHJlc3BvbnNlIGNvZGUg aXMgNDgwLiBJIHdvdWxkIGV4cGVjdCB0byBnZXQgcmVhc29uIDMgbm90IDguIFJlYXNvbiA4IGlz IGNvbmZ1c2luZyBteSBkaWFsZXIgc29mdHdhcmUgc28gaXQgd2FudHMgdG8gcmVkaWFsIHRoZSBu dW1iZXIuDQoNCkkgdXNlIEFzdGVyaXNrIDEuOC4yMi4gSXMgdGhpcyBhIGJ1ZyBpbiBhc3Rlcmlz ayBvciBpcyBhIHByb2JsZW0gd2l0aCBteSBTSVAgdHJ1bmsgcHJvdmlkZXI/DQoNCg0KT24gV2Vk LCBBdWcgMTQsIDIwMTMgYXQgOTowMCBBTSwgTW9yZGVjaGF5IEthZ2FuZXIgPG1rYWdhbmVyQGdt YWlsLmNvbTxtYWlsdG86bWthZ2FuZXJAZ21haWwuY29tPj4gd3JvdGU6DQoNCkIuSC4NCg0KQnV0
    IGlmIHRoZSBmaW5hbCByZXNwb25zZSBpcyA0ODAgZG9lc24ndCBpdCBtZWFuIHRoYXQgdGhlIGNh bGwgd2FzIHBsYWNlZCBidXQgdGhlcmUgd2FzIG5vIHJlcGx5Pw0KT24gQXVnIDEzLCAyMDEzIDEw OjMwIFBNLCAiU2hpc2hpciBQb2toYXJlbCIgPFNoaXNoaXIuUG9raGFyZWxAb24yNC5jb208bWFp bHRvOlNoaXNoaXIuUG9raGFyZWxAb24yNC5jb20+PiB3cm90ZToNCjIxLjEuNTxodHRwOi8vdG9v bHMuaWV0Zi5vcmcvaHRtbC9yZmMzMjYxI3NlY3Rpb24tMjEuMS41PiAxODMgU2Vzc2lvbiBQcm9n cmVzcw0KDQoNCiAgIFRoZSAxODMgKFNlc3Npb24gUHJvZ3Jlc3MpIHJlc3BvbnNlIGlzIHVzZWQg dG8gY29udmV5IGluZm9ybWF0aW9uDQogICBhYm91dCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIGNhbGwg dGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGNsYXNzaWZpZWQuICBUaGUNCiAgIFJlYXNvbi1QaHJhc2Us IGhlYWRlciBmaWVsZHMsIG9yIG1lc3NhZ2UgYm9keSBNQVkgYmUgdXNlZCB0byBjb252ZXkNCiAg IG1vcmUgZGV0YWlscyBhYm91dCB0aGUgY2FsbCBwcm9ncmVzcy4NCg0KMjEuMS4yPGh0dHA6Ly90
    b29scy5pZXRmLm9yZy9odG1sL3JmYzMyNjEjc2VjdGlvbi0yMS4xLjI+IDE4MCBSaW5naW5nDQoN
    Cg0KDQoNCg0KICAgVGhlIFVBIHJlY2VpdmluZyB0aGUgSU5WSVRFIGlzIHRyeWluZyB0byBhbGVy dCB0aGUgdXNlci4gIFRoaXMNCg0KICAgcmVzcG9uc2UgTUFZIGJlIHVzZWQgdG8gaW5pdGlhdGUg bG9jYWwgcmluZ2JhY2suDQoNCmh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMyNjEjc2Vj dGlvbi0yMS4xLjINCg0KRnJvbTogYXN0ZXJpc2stdXNlcnMtYm91bmNlc0BsaXN0cy5kaWdpdW0u Y29tPG1haWx0bzphc3Rlcmlzay11c2Vycy1ib3VuY2VzQGxpc3RzLmRpZ2l1bS5jb20+IFttYWls dG86YXN0ZXJpc2stdXNlcnMtYm91bmNlc0BsaXN0cy5kaWdpdW0uY29tPG1haWx0bzphc3Rlcmlz ay11c2Vycy1ib3VuY2VzQGxpc3RzLmRpZ2l1bS5jb20+XSBPbiBCZWhhbGYgT2YgTW9yZGVjaGF5
    IEthZ2FuZXINClNlbnQ6IFR1ZXNkYXksIEF1Z3VzdCAxMywgMjAxMyAxMDo1NSBBTQ0KVG86IEFz dGVyaXNrIFVzZXJzIE1haWxpbmcgTGlzdCAtIE5vbi1Db21tZXJjaWFsIERpc2N1c3Npb24NClN1
    YmplY3Q6IFJlOiBbYXN0ZXJpc2stdXNlcnNdIFNJUCB0cnVuayBhbmQgY29uZ2VzdGlvbiBoYW5k bGluZw0KDQoNCkIuSC4NCg0KQXN0ZXJpc2sgMS44LjIyDQoNClRoYW5rcw0KT24gQXVnIDEyLCAy MDEzIDg6MDUgUE0sICJTaGlzaGlyIFBva2hhcmVsIiA8U2hpc2hpci5Qb2toYXJlbEBvbjI0LmNv bTxtYWlsdG86U2hpc2hpci5Qb2toYXJlbEBvbjI0LmNvbT4+IHdyb3RlOg0KV2hpY2ggdmVyc2lv biBvZiBhc3RlcmlzayBhcmUgeW91IHVzaW5nID8NCg0KDQpGcm9tOiBhc3Rlcmlzay11c2Vycy1i b3VuY2VzQGxpc3RzLmRpZ2l1bS5jb208bWFpbHRvOmFzdGVyaXNrLXVzZXJzLWJvdW5jZXNAbGlz dHMuZGlnaXVtLmNvbT4gW21haWx0bzphc3Rlcmlzay11c2Vycy1ib3VuY2VzQGxpc3RzLmRpZ2l1
    bS5jb208bWFpbHRvOmFzdGVyaXNrLXVzZXJzLWJvdW5jZXNAbGlzdHMuZGlnaXVtLmNvbT5dIE9u IEJlaGFsZiBPZiBNb3JkZWNoYXkgS2FnYW5lcg0KU2VudDogU3VuZGF5LCBBdWd1c3QgMTEsIDIw MTMgODo1OSBBTQ0KVG86IEFzdGVyaXNrIFVzZXJzIE1haWxpbmcgTGlzdCAtIE5vbi1Db21tZXJj aWFsIERpc2N1c3Npb24NClN1YmplY3Q6IFthc3Rlcmlzay11c2Vyc10gU0lQIHRydW5rIGFuZCBj b25nZXN0aW9uIGhhbmRsaW5nDQoNCkIuSC4NCg0KSGVsbG8sIGFsbC4gV2UgaGF2ZSBhIGRpYWxl ciBzb2Z0d2FyZSB0aGF0IHJ1bnMgb3V0Z29pbmcgdGVsZXBob255IGNhbXBhaWducy4gV2UgaGF2
    ZSBiZWVuIHVzaW5nIGl0IHN1Y2Nlc3NmdWxseSB3aXRoIFBSSSBjYXJkcywgbm93IHdlJ3JlIGV2
    YWx1YXRpbmcgaXQncyB1c2UgYWxzbyB3aXRoIGEgU0lQIHRydW5rLiBNb3N0IG9mIHRoZSB0aGlu Z3MgcnVuIHBlcmZlY3RseSBnb29kIHdpdGhvdXQgYSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBl eGNlcHQgZm9yIGRpYWwgc3RyaW5nLCBidXQgdGhlcmUncyBzb21lIHN0cmFuZ2UgcHJvYmxlbSB3
    aXRoIGFzdGVyaXNrIGludGVycHJldGluZyBTSVAgcmVzdWx0IGNvZGVzLg0KDQpPdXIgc29mdHdh cmUgaXMgd3JpdHRlbiBpbiBKYXZhIHVzaW5nIGFzdGVyaXNrLWphdmEgbGlicmFyeS4gSXQgaXMg dXNpbmcgQXN0ZXJpc2sncyByZWFzb24gY29kZSBmcm9tIE9yaWdpbmF0ZVJlc3BvbnNlRXZlbnQg dG8gZGV0ZXJtaW5lIGlmIGl0IHNob3VsZCByZWRpYWwgdGhlIG51bWJlci4gT3VyIGNvbnNpZGVy YXRpb24gaXMgdGhhdCBpZiBBc3RlcmlzayByZXR1cm5zIHJlYXNvbiBjb2RlIDggKENvbmdlc3Rp b24pIHRoaXMgbWVhbnMgdGhhdCB0aGUgY2FsbCBoYXMgbmV2ZXIgYWN0dWFsbHkgcmVhY2hlZCB0
    aGUgZGVzdGluYXRpb24gbnVtYmVyLCBhbmQgaXQncyBPSyB0byB0cnkgdG8gcmVkaWFsIGFnYWlu Lg0KDQpCdXQgd2l0aCBTSVAgdHJ1bmssIG1hbnkgdGltZXMgaSBjYW4gc2VlIGEgcmVhbGx5IHN0
    cmFuZ2Ugc2VxdWVuY2Ugb2YgZXZlbnRzOg0KDQpBZnRlciBJTlZJVEUgaSBnZXQgdGhlIGZvbGxv d2luZyByZXNwb25zZXMgKGV4YW1wbGUgZnJvbSBhIHJlYWwgY29udmVyc2F0aW9uKQ0KWzE3OjAx OjQwXSBTSVAvMi4wIDEwMCBUcnlpbmcNClsxNzowMTo0MF0gU0lQLzIuMCAxODMgU2Vzc2lvbiBQ
    cm9ncmVzcw0KWzE3OjAxOjUxXSBTSVAvMi4wIDQ4MCBUZW1wb3JhcmlseSBub3QgYXZhaWxhYmxl DQoNCkFzIGZhciBhcyBpIHVuZGVyc3RhbmQsIHRoaXMgbWVhbnMgdGhhdCB0aGUgcmVtb3RlIHBo b25lIHdhcyByaW5naW5nIGZvciAxMCBzZWNvbmRzIGFuZCB0aGVuIHRoZSBjYWxsIGZhaWxlZCBk dWUgdG8gYSB0aW1lb3V0LiBBcyBmYXIgYXMgaSB1bmRlcnN0YW5kLCBpJ20gc3VwcG9zZWQgdG8g Z2V0IHJlYXNvbiBjb2RlIDMsIGJ1dCBhY3R1YWxseSB0aGUgamF2YSBhcHBsaWNhdGlvbiBnZXRz IE9yaWdpbmF0ZVJlc3BvbnNlRXZlbnQgd2l0aCBmYWlsdXJlIHJlYXNvbiBjb2RlIDguDQoNClRo aXMgYmVoYXZpb3IgaXMgaGFyZCB0byByZXByb2R1Y2UuIEkgd2FzIHRyeWluZyB3aXRoIG15IG93
    biBwaG9uZSBudW1iZXIgYW5kIHRoZW4gaSBnZXQgdGhlIGV4cGVjdGVkIHJlYXNvbiBjb2RlIDMs IGJ1dCBpIGNvbnN0YW50bHkgZ2V0IHRoaXMgc2l0dWF0aW9uIHJ1bm5pbmcgb3VyIGN1c3RvbWVy J3MgY2FtcGFpZ25zLg0KDQoNCi0tDQrXntep15nXlyBOT1chDQpNb3NoaWFjaCBpcyBjb21pbmcg dmVyeSBzb29uLCBwcmVwYXJlIHlvdXJzZWxmIQ0K15nXl9eZINeQ15PXldeg16DXlSDXnteV16jX
    mdeg15Ug15XXqNeR15nXoNeVINee15zXmiDXlNee16nXmdeXINec16LXldec150g15XXoteTIQ0K
    DQotLQ0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fDQotLSBCYW5kd2lkdGggYW5kIENvbG9jYXRpb24gUHJvdmlkZWQg YnkgaHR0cDovL3d3dy5hcGktZGlnaXRhbC5jb20gLS0NCk5ldyB0byBBc3Rlcmlzaz8gSm9pbiB1
    cyBmb3IgYSBsaXZlIGludHJvZHVjdG9yeSB3ZWJpbmFyIGV2ZXJ5IFRodXJzOg0KICAgICAgICAg ICAgICAgaHR0cDovL3d3dy5hc3Rlcmlzay5vcmcvaGVsbG8NCg0KYXN0ZXJpc2stdXNlcnMgbWFp bGluZyBsaXN0DQpUbyBVTlNVQlNDUklCRSBvciB1cGRhdGUgb3B0aW9ucyB2aXNpdDoNCiAgIGh0
    dHA6Ly9saXN0cy5kaWdpdW0uY29tL21haWxtYW4vbGlzdGluZm8vYXN0ZXJpc2stdXNlcnMNCg0K
    LS0NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXw0KLS0gQmFuZHdpZHRoIGFuZCBDb2xvY2F0aW9uIFByb3ZpZGVkIGJ5
    IGh0dHA6Ly93d3cuYXBpLWRpZ2l0YWwuY29tIC0tDQpOZXcgdG8gQXN0ZXJpc2s/IEpvaW4gdXMg Zm9yIGEgbGl2ZSBpbnRyb2R1Y3Rvcnkgd2ViaW5hciBldmVyeSBUaHVyczoNCiAgICAgICAgICAg ICAgIGh0dHA6Ly93d3cuYXN0ZXJpc2sub3JnL2hlbGxvDQoNCmFzdGVyaXNrLXVzZXJzIG1haWxp bmcgbGlzdA0KVG8gVU5TVUJTQ1JJQkUgb3IgdXBkYXRlIG9wdGlvbnMgdmlzaXQ6DQogICBodHRw Oi8vbGlzdHMuZGlnaXVtLmNvbS9tYWlsbWFuL2xpc3RpbmZvL2FzdGVyaXNrLXVzZXJzDQoNCg0K
    DQotLQ0K157XqdeZ15cgTk9XIQ0KTW9zaGlhY2ggaXMgY29taW5nIHZlcnkgc29vbiwgcHJlcGFy ZSB5b3Vyc2VsZiENCteZ15fXmSDXkNeT15XXoNeg15Ug157Xldeo15nXoNeVINeV16jXkdeZ16DX
    lSDXntec15og15TXntep15nXlyDXnNei15XXnNedINeV16LXkyENCg=