Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit df58baf
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date:   Tue Oct 29 21:05:07 2024 -0400

    Cookie Sync: Use max when limit is 0 (prebid#4022)

commit db2a872
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date:   Tue Oct 29 17:20:57 2024 -0400

    ORTB 2.6: Full support with down convert for 2.5 adapters (prebid#4019)

    Co-authored-by: hhhjort <31041505+hhhjort@users.noreply.github.com>
    Co-authored-by: Veronika Solovei <kalypsonika@gmail.com>

commit 1419761
Author: Scott Kay <noreply@syntaxnode.com>
Date:   Tue Oct 29 16:35:05 2024 -0400

    Rename Blacklisted Apps to Blocked Apps (prebid#3620)

commit ddf897c
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date:   Tue Oct 29 14:07:49 2024 -0400

    Update Cookie Sync Chooser Debug Message to match Java (prebid#3558)

commit a23380f
Author: Mohammad Nurul Islam Shihan <93646635+ishihanvcs@users.noreply.github.com>
Date:   Tue Oct 29 21:34:31 2024 +0600

    ImproveDigital: Remove placementKey & addtlconsent parsing (prebid#3728)

commit 03a4abd
Author: Alex Maltsev <and1sscsgo@gmail.com>
Date:   Tue Oct 22 22:26:45 2024 +0300

    Sample: Fix prebid js loading bug on sample html page (prebid#3792)

commit 18f6798
Author: Sebastien Boisvert <sebhtml@protonmail.com>
Date:   Tue Oct 22 15:15:07 2024 -0400

    Bump Go version to 1.22 in dev containers config (prebid#3983)

commit bcf6491
Author: sindhuja-sridharan <148382298+sindhuja-sridharan@users.noreply.github.com>
Date:   Thu Oct 17 15:20:45 2024 -0600

    GumGum: Declare ORTB 2.6 support (prebid#3985)

commit 451bc44
Author: Bluesea <129151981+blueseasx@users.noreply.github.com>
Date:   Thu Oct 17 03:12:50 2024 +0800

    BlueSea: Add site capability (prebid#3910)

    Co-authored-by: prebid-bluesea <prebid@blueseasx.com>

commit 8134328
Author: Boris Yu <admin@xdevel.info>
Date:   Wed Oct 16 21:08:50 2024 +0300

    Displayio: Make imp.bidfloor optional (prebid#3959)

commit b56923c
Author: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com>
Date:   Tue Oct 15 21:49:39 2024 +0200

    RTB House: Resolve AUCTION_PRICE macro (prebid#3901)

commit cbe9876
Author: Irakli Gotsiridze <ikagotso@gmail.com>
Date:   Tue Oct 15 23:30:17 2024 +0400

    enable gzip (prebid#3946)

commit 5fcbbbf
Author: Patrick Loughrey <ploughrey@triplelift.com>
Date:   Tue Oct 15 15:19:47 2024 -0400

    Triplelift: Adding flag for 2.6 support (prebid#3966)

commit c37951a
Author: ym-winston <46379634+ym-winston@users.noreply.github.com>
Date:   Tue Oct 15 15:18:54 2024 -0400

    update yieldmo.yaml to indicate support for ortb 2.6 (prebid#3968)

commit 9bb9b3d
Author: bhainesnexxen <146981622+bhainesnexxen@users.noreply.github.com>
Date:   Tue Oct 15 12:09:33 2024 -0700

    Unruly: Indicate Support for OpenRTB 2.6 (prebid#3984)

commit 87d4412
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date:   Wed Oct 9 19:08:14 2024 +0000

    Refactor: Move privacy init up (prebid#3958)

commit 64584f6
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date:   Tue Oct 8 19:52:25 2024 +0000

    Refactor: Remove getAuctionBidderRequests (prebid#3957)

commit d54c3ed
Author: ysfbsf <youssef.bsf@gmail.com>
Date:   Tue Oct 8 15:42:40 2024 +0200

    New Adapter: Missena (prebid#3761)

commit 8689e0d
Author: Nick <bansawbanchee@users.noreply.github.com>
Date:   Mon Oct 7 10:39:59 2024 -0400

    Sonobi: native and currency conversion support (prebid#3889)

    Co-authored-by: bansawbanchee <nick@britepool.com>

commit f27bcef
Author: dkornet-ad <169174147+dkornet-ad@users.noreply.github.com>
Date:   Thu Oct 3 09:33:54 2024 +0300

    New Adapter: Bidmatic (prebid#3731)

    authored by @dkornet-ad

commit 6c154e0
Author: Alexander Pykhteyev <alex.pykhteyev@gmail.com>
Date:   Wed Sep 25 23:08:23 2024 +0700

    New Adapter: Streamlyn  (prebid#3900)

    Co-authored-by: apykhteyev <alex@project-limelight.com>

commit 53f51a6
Author: przemkaczmarek <167743744+przemkaczmarek@users.noreply.github.com>
Date:   Wed Sep 25 17:53:07 2024 +0200

    GPC: Set extension based on header (prebid#3895)

commit c42fe53
Author: bkaneyama <brad.kaneyama@gmail.com>
Date:   Wed Sep 25 07:46:01 2024 -0700

    InMobi: mtype support (prebid#3921)

commit 8b1b96e
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date:   Wed Sep 25 14:22:18 2024 +0000

    Add docs build readme  (prebid#3930)

commit 4462fce
Author: Eugene Dorfman <eugene.dorfman@gmail.com>
Date:   Wed Sep 25 16:11:45 2024 +0200

    51degrees module (prebid#3893)

commit 11b6546
Author: Alex Maltsev <and1sscsgo@gmail.com>
Date:   Mon Sep 23 16:54:18 2024 +0300

    Rubicon: Pass PBS host info to XAPI (prebid#3903)

commit 93368cc
Author: rtuschkany <35923908+rtuschkany@users.noreply.github.com>
Date:   Thu Sep 19 23:45:32 2024 +0200

    ConnectAd: String/int fix (prebid#3925)

commit 905b3a5
Author: ShriprasadM <shriprasad.marathe@gmail.com>
Date:   Thu Sep 19 18:30:20 2024 +0530

    Log non bid reasons in bidder framework (prebid#2891)

    Co-authored-by: Shriprasad Marathe <shriprasad.marathe@pubmatic.com>
    Co-authored-by: ashish.shinde <ashish.shinde@pubmatic.com>
    Co-authored-by: dhruv.sonone <dhruv.sonone@pubmatic.com>

commit 3c4527e
Author: Mikael Lundin <mikael-lundin@users.noreply.github.com>
Date:   Wed Sep 18 13:38:49 2024 +0200

    Adnuntius: Return DSA in bid response (prebid#3777)

commit 640b97c
Author: lm-ved <105272141+lm-ved@users.noreply.github.com>
Date:   Mon Sep 16 12:17:54 2024 +0530

    LemmaDigital: change endpoint (prebid#3862)

commit 3e24be7
Author: Alexander Pykhteyev <alex.pykhteyev@gmail.com>
Date:   Sat Sep 14 04:04:09 2024 +0700

    New Adapter: TGM (prebid#3848)

    Co-authored-by: apykhteyev <alex@project-limelight.com>

commit ffdd75f
Author: Robert Kawecki <rkaw92@users.noreply.github.com>
Date:   Thu Sep 12 21:52:51 2024 +0200

    New Adapter: AdTonos (prebid#3853)

commit c02ee8c
Author: Laurentiu Badea <laurb9@users.noreply.github.com>
Date:   Thu Sep 12 12:34:46 2024 -0700

    Update exchange json tests with correct hb_pb_cat_dur  (prebid#3836)

commit 7613ff5
Author: Laurentiu Badea <laurb9@users.noreply.github.com>
Date:   Thu Sep 12 12:27:07 2024 -0700

    Update adapter json test framework to validate BidVideo (prebid#3835)

commit 6cbedf0
Author: schubert-sc <144821265+schubert-sc@users.noreply.github.com>
Date:   Wed Sep 11 19:41:53 2024 +0300

    Smartx: Declare OpenRTB 2.6 support (prebid#3896)

commit e0a21d0
Author: qt-io <104574052+qt-io@users.noreply.github.com>
Date:   Wed Sep 11 19:31:58 2024 +0300

    QT: Add tcfeu support (prebid#3892)

    Co-authored-by: qt-io <qtssp-support@qt.io>

commit b920cca
Author: Yanivplaydigo <165155195+Yanivplaydigo@users.noreply.github.com>
Date:   Wed Sep 11 19:19:12 2024 +0300

    Playdigo: Add tcfeu support (prebid#3890)

commit 6a011ed
Author: ccorbo <ccorbo2013@gmail.com>
Date:   Wed Sep 11 09:53:54 2024 -0400

    Update github.com/rs/cors to v1.11.0 (prebid#3884)

    Co-authored-by: Chris Corbo <chris.corbo@indexexchange.com>

commit ec6a45d
Author: Steffen Müller <449563+steffenmllr@users.noreply.github.com>
Date:   Wed Sep 4 15:51:44 2024 +0200

    Agma: Allow app.bundle to be used as selector for apps (prebid#3780)

commit 8237f7f
Author: Scott Kay <noreply@syntaxnode.com>
Date:   Tue Sep 3 14:34:56 2024 -0400

    Refactor Bid Splitter Privacy Functions (prebid#3645)

commit f7caea5
Author: Brian Schmidt <brian.schmidt@openx.com>
Date:   Fri Aug 30 06:47:45 2024 -0700

    OpenX: indicate support for OpenRTB 2.6 (prebid#3879)

commit e825553
Author: Ben Oraki <46795400+BenOraki@users.noreply.github.com>
Date:   Fri Aug 30 16:36:22 2024 +0300

    New Adapter: Oraki (prebid#3839)

commit 2e2b49f
Author: escalax <management@escalax.io>
Date:   Fri Aug 30 16:28:04 2024 +0300

    New Adapter: Escalax (prebid#3798)

commit 4ea0e33
Author: Copper6SSP <info@copper6.com>
Date:   Fri Aug 30 16:18:46 2024 +0300

    New Adapter: Copper6SSP (prebid#3755)

commit 8d7117d
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date:   Tue Aug 27 13:23:34 2024 -0400

    Revert "New Module: 51Degrees (prebid#3650)" (prebid#3888)

    This reverts commit 2606e75.

commit 84a8162
Author: Anand Venkatraman <avenkatraman@pulsepoint.com>
Date:   Thu Aug 22 16:14:32 2024 +0530

    PulsePoint: ortb 2.6 version and gpp support (prebid#3874)

    authored by @anand-venkatraman

commit bd85ba4
Author: Nick Llerandi <nick.llerandi@kargo.com>
Date:   Thu Aug 22 02:15:12 2024 -0400

    specifies ortb 2.6 support (prebid#3) (prebid#3876)

commit 54f8759
Author: dtbarne <7635750+dtbarne@users.noreply.github.com>
Date:   Wed Aug 21 07:26:30 2024 -0500

    Update mobilefuse.yaml to indicate support for OpenRTB 2.6 and GPP (prebid#3871)

commit 59a5b07
Author: mwang-sticky <mwang@freewheel.tv>
Date:   Wed Aug 21 20:26:15 2024 +0800

    freewheel-adapter: support 2.6 (prebid#3873)

commit a556e2d
Author: Dubyk Danylo <45672370+CTMBNara@users.noreply.github.com>
Date:   Wed Aug 21 15:23:39 2024 +0300

    Fix currency conversion bug. (prebid#3867)

    Co-authored-by: ddubyk <ddubyk@magnite.com>

commit d161712
Author: Pubrise <prebid@pubrise.ai>
Date:   Wed Aug 21 12:43:39 2024 +0300

    new adapter (prebid#3833)

    authored by @Pubrise

commit e8509e6
Author: bretg <bgorsline@gmail.com>
Date:   Wed Aug 21 05:40:26 2024 -0400

    declare support for ORTB 2.6 (prebid#3872)

    authored by @bretg

commit 6be7244
Author: Saar Amrani <saar120@gmail.com>
Date:   Wed Aug 21 12:37:59 2024 +0300

    Update Vidazoo bidder info for GPP support (prebid#3869)

commit e4bd6d3
Author: gg-natalia <148577437+gg-natalia@users.noreply.github.com>
Date:   Sun Aug 18 06:52:28 2024 -0300

    ADTS-455 remove video validations (prebid#3842)

    authored by @gg-natalia

commit 2606e75
Author: James Rosewell <james@51degrees.com>
Date:   Fri Aug 16 14:20:22 2024 +0100

    New Module: 51Degrees (prebid#3650)

    Co-authored-by: James Rosewell <james@51degrees.com>
    Co-authored-by: Marin Miletic <mrnmiletic@gmail.com>
    Co-authored-by: Sarana-Anna <anna.sarana@gmail.com>
    Co-authored-by: Eugene Dorfman <eugene.dorfman@gmail.com>
    Co-authored-by: Krasilchuk Yaroslav <legend.ko@hotmail.com>

commit 0e9b234
Author: Antonios Sarhanis <tsarhanis@gmail.com>
Date:   Tue Aug 13 18:28:44 2024 +1000

    Use format=prebid on adserver requests. (prebid#3846)

commit 4d64623
Author: ownAdx <135326256+ownAdx-prebid@users.noreply.github.com>
Date:   Mon Aug 12 18:51:53 2024 +0530

    OwnAdx: Bidder param and URL updates (prebid#3813)

    Co-authored-by: Hina Yadav <hina.yadav@vertoz.com>

commit 2a19924
Author: ahmadlob <109217988+ahmadlob@users.noreply.github.com>
Date:   Mon Aug 12 16:09:23 2024 +0300

    taboola-support-app-in-prebid-server (prebid#3795)

commit 4f177ca
Author: benben2001 <145416009+benben2001@users.noreply.github.com>
Date:   Mon Aug 12 21:07:38 2024 +0800

    New Adapter: MeloZen (prebid#3784)
  • Loading branch information
bevenio committed Oct 30, 2024
1 parent 5d92bd3 commit 98e382d
Show file tree
Hide file tree
Showing 383 changed files with 26,742 additions and 4,652 deletions.
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"dockerfile": "Dockerfile",
"args": {
// Update the VARIANT arg to pick a version of Go
"VARIANT": "1.20",
"VARIANT": "1.22",
// Options
"INSTALL_NODE": "false",
"NODE_VERSION": "lts/*"
Expand Down
1 change: 0 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ FROM golang:1.21-alpine
RUN apk add --update tini
RUN mkdir -p /app/prebid-server/
WORKDIR /app/prebid-server/

COPY ./ ./

RUN go mod download
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ or compile a standalone binary using the command:
``` bash
go build .
```
**Note:** if building from source there are a couple dependencies to be aware of:
1. *Compile-time*. Some modules ship native code that requires `cgo` (comes with the `go` compiler) being enabled - by default it is and environment variable `CGO_ENABLED=1` do NOT set it to `0`.
2. *Compile-time*. `cgo` depends on the C-compiler, which usually is `gcc`, but can be changed by setting the value of `CC` env var, f.e. `CC=clang`. On ubuntu `gcc` can be installed via `sudo apt-get install gcc`.
3. *Runtime*. Some modules require `libatomic`. On ubuntu it is installed by running `sudo apt-get install libatomic1`. `libatomic1` is a dependency of `gcc`, so if you are building with `gcc` and running on the same machine, it is likely that `libatomic1` is already installed.

Ensure that you deploy the `/static` directory, as Prebid Server requires those files at startup.

## Developing
Expand Down
19 changes: 16 additions & 3 deletions adapters/adapterstest/test_json.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,10 @@ type expectedBidResponse struct {
}

type expectedBid struct {
Bid json.RawMessage `json:"bid"`
Type string `json:"type"`
Seat string `json:"seat"`
Bid json.RawMessage `json:"bid"`
Type string `json:"type"`
Seat string `json:"seat"`
Video json.RawMessage `json:"video,omitempty"`
}

// ---------------------------------------
Expand Down Expand Up @@ -330,6 +331,9 @@ func diffBids(t *testing.T, description string, actual *adapters.TypedBid, expec
assert.Equal(t, string(expected.Seat), string(actual.Seat), fmt.Sprintf(`%s.seat "%s" does not match expected "%s."`, description, string(actual.Seat), string(expected.Seat)))
assert.Equal(t, string(expected.Type), string(actual.BidType), fmt.Sprintf(`%s.type "%s" does not match expected "%s."`, description, string(actual.BidType), string(expected.Type)))
assert.NoError(t, diffOrtbBids(fmt.Sprintf("%s.bid", description), actual.Bid, expected.Bid))
if expected.Video != nil {
assert.NoError(t, diffBidVideo(fmt.Sprintf("%s.video", description), actual.BidVideo, expected.Video))
}
}

// diffOrtbBids compares the actual Bid made by the adapter to the expectation from the JSON file.
Expand All @@ -346,6 +350,15 @@ func diffOrtbBids(description string, actual *openrtb2.Bid, expected json.RawMes
return diffJson(description, actualJson, expected)
}

func diffBidVideo(description string, actual *openrtb_ext.ExtBidPrebidVideo, expected json.RawMessage) error {
actualJson, err := json.Marshal(actual)
if err != nil {
return fmt.Errorf("%s failed to marshal actual Bid Video into JSON. %v", description, err)
}

return diffJson(description, actualJson, []byte(expected))
}

// diffJson compares two JSON byte arrays for structural equality. It will produce an error if either
// byte array is not actually JSON.
func diffJson(description string, actual []byte, expected []byte) error {
Expand Down
50 changes: 49 additions & 1 deletion adapters/adnuntius/adnuntius.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ type extDeviceAdnuntius struct {
NoCookies bool `json:"noCookies,omitempty"`
}

type adnAdvertiser struct {
LegalName string `json:"legalName,omitempty"`
Name string `json:"name,omitempty"`
}

type Ad struct {
Bid struct {
Amount float64
Expand All @@ -53,6 +58,7 @@ type Ad struct {
LineItemId string
Html string
DestinationUrls map[string]string
Advertiser adnAdvertiser `json:"advertiser,omitempty"`
}

type AdUnit struct {
Expand Down Expand Up @@ -159,7 +165,7 @@ func makeEndpointUrl(ortbRequest openrtb2.BidRequest, a *adapter, noCookies bool
}

q.Set("tzo", fmt.Sprint(tzo))
q.Set("format", "json")
q.Set("format", "prebid")

url := endpointUrl + "?" + q.Encode()
return url, nil
Expand Down Expand Up @@ -335,6 +341,40 @@ func getGDPR(request *openrtb2.BidRequest) (string, string, error) {
return gdpr, consent, nil
}

func generateReturnExt(ad Ad, request *openrtb2.BidRequest) (json.RawMessage, error) {
// We always force the publisher to render
var adRender int8 = 0

var requestRegsExt *openrtb_ext.ExtRegs
if request.Regs != nil && request.Regs.Ext != nil {
if err := json.Unmarshal(request.Regs.Ext, &requestRegsExt); err != nil {

return nil, fmt.Errorf("Failed to parse Ext information in Adnuntius: %v", err)
}
}

if ad.Advertiser.Name != "" && requestRegsExt != nil && requestRegsExt.DSA != nil {
legalName := ad.Advertiser.Name
if ad.Advertiser.LegalName != "" {
legalName = ad.Advertiser.LegalName
}
ext := &openrtb_ext.ExtBid{
DSA: &openrtb_ext.ExtBidDSA{
AdRender: &adRender,
Paid: legalName,
Behalf: legalName,
},
}
returnExt, err := json.Marshal(ext)
if err != nil {
return nil, fmt.Errorf("Failed to parse Ext information in Adnuntius: %v", err)
}

return returnExt, nil
}
return nil, nil
}

func generateAdResponse(ad Ad, imp openrtb2.Imp, html string, request *openrtb2.BidRequest) (*openrtb2.Bid, []error) {

creativeWidth, widthErr := strconv.ParseInt(ad.CreativeWidth, 10, 64)
Expand Down Expand Up @@ -376,6 +416,13 @@ func generateAdResponse(ad Ad, imp openrtb2.Imp, html string, request *openrtb2.
}
}

extJson, err := generateReturnExt(ad, request)
if err != nil {
return nil, []error{&errortypes.BadInput{
Message: fmt.Sprintf("Error extracting Ext: %s", err.Error()),
}}
}

adDomain := []string{}
for _, url := range ad.DestinationUrls {
domainArray := strings.Split(url, "/")
Expand All @@ -395,6 +442,7 @@ func generateAdResponse(ad Ad, imp openrtb2.Imp, html string, request *openrtb2.
Price: price * 1000,
AdM: html,
ADomain: adDomain,
Ext: extJson,
}
return &bid, nil

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"httpCalls": [
{
"expectedRequest": {
"uri": "http://whatever.url?format=json&tzo=0",
"uri": "http://whatever.url?format=prebid&tzo=0",
"body": {
"adUnits": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"httpCalls": [
{
"expectedRequest": {
"uri": "http://whatever.url?format=json&tzo=0",
"uri": "http://whatever.url?format=prebid&tzo=0",
"body": {
"adUnits": [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
{
"mockBidRequest": {
"id": "test-request-id",
"user": {
"id": "1kjh3429kjh295jkl"
},
"site": {
"ext":{
"data" : {
"key": ["value"]
}
}
},
"regs": {
"ext": {
"dsa": {
"dsarequired": 3,
"datatopub": 1
}
}
},
"imp": [
{
"id": "test-imp-id",
"banner": {
"format": [
{
"w": 300,
"h": 250
},
{
"w": 300,
"h": 600
}
]
},
"ext": {
"bidder": {
"auId": "123"
}
}
}
]
},
"httpCalls": [
{
"expectedRequest": {
"uri": "http://whatever.url?format=prebid&tzo=0",
"body": {
"adUnits": [
{
"auId": "123",
"targetId": "123-test-imp-id",
"dimensions": [[300,250],[300,600]]
}
],
"kv": {
"key": ["value"]
},
"metaData": {
"usi": "1kjh3429kjh295jkl"
},
"context": "unknown"
},
"impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
"body": {
"adUnits": [
{
"auId": "0000000000000123",
"targetId": "123-test-imp-id",
"html": "<ADCODE>",
"responseId": "adn-rsp-900646517",
"ads": [
{
"destinationUrls": {
"url": "http://www.google.com"
},
"bid": {
"amount": 20.0,
"currency": "NOK"
},
"adId": "adn-id-1559784094",
"creativeWidth": "980",
"creativeHeight": "240",
"creativeId": "jn9hpzvlsf8cpdmm",
"lineItemId": "q7y9qm5b0xt9htrv",
"advertiser": {
"name": "Name"
}
}
]
}
]
}
}
}
],
"expectedBidResponses": [
{
"bids": [
{
"bid": {
"id": "adn-id-1559784094",
"impid": "test-imp-id",
"price": 20000,
"adm": "<ADCODE>",
"adid": "adn-id-1559784094",
"adomain": [
"google.com"
],
"cid": "q7y9qm5b0xt9htrv",
"crid": "jn9hpzvlsf8cpdmm",
"w": 980,
"h": 240,
"ext": {
"dsa": {
"paid": "Name",
"behalf": "Name",
"adrender": 0
}
}
},
"type": "banner"

}
],
"currency": "NOK"
}
]
}
Loading

0 comments on commit 98e382d

Please sign in to comment.